当前位置: 首页 > news >正文

老题新解|再求 f(x,n)

《信息学奥赛一本通》第147题:再求 f(x,n)

题目描述
已知
f(x,n)=xn+x(n−1)+x(n−2)+⋮⋯+x1+xf(x,n)=\dfrac{x}{n+\dfrac{x}{(n-1)+\dfrac{x}{(n-2)+\dfrac{\vdots}{\cdots+\dfrac{x}{1+x}}}}}f(x,n)=n+(n1)+(n2)++1+xxxxx
用递归函数求解。
输入格式
第一个数是 xxx 的值,第二个数是 nnn 的值。(xxx实数nnn 为整数)
输出格式
函数值,保留两位小数。
输入输出样例 #1
输入 #1
1
2
输出 #1
0.40

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第 147 题:再求 f(x,n)。

image.png

一、题目描述

洛谷的题号是:B2148 再求 f(x,n)

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 147 题。

根据输入格式的描述,输入两个数,一个是 x,另一个是 n,x 是实数,n 是整数,为避免精度问题,两个都用 double 类型。

double x,n;
cin>>x>>n;

根据题目描述,需要按公式完成式子的计算,先计算第 1 层,即 k=1 时:

f(x,1)=x1+x​f(x,1)=\frac{x}{1+x}​ f(x,1)=1+xx
而对于 k>=2 时,就需要将第 k-1 层的结果放在分母:

f(x,k)=xk+f(x,k−1)​f(x,k)=\frac{x}{k+f(x,k−1)}​ f(x,k)=k+f(x,k1)x

所以可以写函数,函数名为 add,根据输出结果,返回类型为 double,参数有两个。

当 n 等于 1 时,返回 x1+x\frac{x}{1+x}1+xx 值,可以将 1 变为 1.0,方便精度。

当 n 大于 1 时,返回 xk+f(x,k−1)\frac{x}{k+f(x,k−1)}k+f(x,k1)x 值,

double add(double x,double n)
{//边界if(n==1) return x/(1.0+x);else{return x/(n+add(x,n-1.0)); }
}

输出小数点后两位,使用 printf 函数。

printf("%.2lf",add(x,y));

按照样例输入对数据进行验证。

image.png

符合样例输出,到网站提交测评。

image.png

测试通过!

三、完整代码

该题的完整代码如下:

#include <iostream>
using namespace std;
double add(double x,double n)
{//边界if(n==1) return x/(1+x);else{return x/(n+add(x,n-1)); }
}
int main()
{double x,y;cin>>x>>y;printf("%.2lf",add(x,y));
}

四、总结

本题考察了递归函数与分数嵌套表达式的实现,主要涵盖以下知识点:

1、递归函数设计

(1)明确递归的边界条件:当 n=1 时返回 x1+x\dfrac{x}{1+x}1+xx
(2)递归调用关系:当 n>1 时,返回 xn+f(x,n−1)\dfrac{x}{n+f(x,n-1)}n+f(x,n1)x

2、数据类型选择

避免精度丢失,需使用 double 类型存储输入与计算结果。

3、输出格式控制

利用 printf("%.2lf", …) 控制小数点后两位,符合题目输出要求。

常见易错点:

1、递归边界遗漏

若未正确设置 if(n==1) 的返回条件,递归会陷入死循环。

建议:在写递归函数前,先推导数学公式的最底层情况。

2、整数与小数混用

若写成 1+x 而非 1.0+x,可能导致整型参与运算,精度不足。

建议:统一使用 double 类型,并在常数中加小数点。

3、输出精度错误

直接用 cout 默认可能输出多位或少位小数,不符合题意。

建议:使用 printf("%.2lf", …)cout<<fixed<<setprecision(2)

4、递归效率担忧

虽然本题数据规模不大,但递归层数过深会影响效率。

建议:理解递归原理后,也可尝试用循环迭代实现,增强灵活性。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~

http://www.dtcms.com/a/434809.html

相关文章:

  • 【Android cmd命令的执行流程】
  • c++26新功能—constexpr在稳定排序中的应用
  • AI生成悬疑故事
  • 泰山派rk3566烧录
  • Phpstudy博客网站apache2日志分析python代码
  • asp网站程序优点做App和网站 聚马
  • 免费软件下载网站入口正能量微信开发公众平台
  • 【系统重装】Windows无法安装到这个磁盘提示选中的磁盘具有MBR分区表解决方法(亲测有效)
  • MySQL 查询与更新语句执行过程深度解析:从原理到实践​
  • Bella Beauty – Aesthetic Medical Clinic WordPress Theme: A Practical
  • 洗车店会员管理系统数据分析
  • 门户网站的意思wordpress 导航 防刷新
  • 虚幻基础:角色受击
  • unordered_set 与unordered_multiset?我们该如何选择
  • 网站建设与维护是什么可以在线观看的免费资源
  • Windows系统下的Git安装(2025年6月更新)
  • Protobuf知识总结
  • 网站的关键词在哪里设置南阳微网站建设
  • GPT‑5 都更新了些什么?
  • 晋中路桥建设集团网站tuzicms做企业手机网站如何
  • 2013 年真题配套词汇单词笔记(考研真相)
  • 女生做网站编辑公司网站开发多少钱
  • 记录GoLang创建文件并写入文件的中文乱码错误!
  • ISO 27001 信息安全管理体系 (ISMS) 建设与运营
  • TCP 的韧性:端网关系对传输协议的影响
  • 怎么创网站赚钱网站美工工作流程
  • malloc:arena
  • 第12课:构建对话记忆:打造多轮对话RAG机器人
  • 大良营销网站建设如何模板网站没有源代码
  • 归并排序的递归和非递归实现