C语言计算指定数学序列的迭代版函数实现及优化咨询
迭代版本实现思路
你提供的递归版本对应的递推规则非常明确:
- 初始条件:x₀ = 1.0(对应n=0的返回值)
- 递推关系:对所有n≥1,xₙ = xₙ₋₁ + 1/xₙ₋₁
迭代版本直接从初始值x₀正向计算n次即可,不需要回溯,也不需要额外栈空间。
符合要求的迭代代码
float sequence(int n) { float x = 1.0f; // 对应sequence(0)的结果 // 边界校验,若题目保证输入n为非负整数可删除该行 if (n < 0) return 0.0f; for (int i = 0; i < n; i++) { x += 1.0f / x; } return x; }
代码说明
- 时间复杂度为O(n),仅需要执行n次加法和除法运算,无冗余计算
- 空间复杂度为O(1),全程只使用2个局部变量,比递归版本的O(n)递归栈空间开销小很多,也避免了n值过大时递归栈溢出的问题
- 计算结果和你提供的递归版本完全匹配:sequence(0)=1,sequence(1)=2,sequence(2)=2.5,sequence(3)=2.9,sequence(100)≈14.284066,你问题描述里的sequence(3)=2.5、sequence(4)=2.9属于序号标注错误,实际是n=2对应2.5,n=3对应2.9
内容的提问来源于stack exchange,提问作者mxbr236
相关产品推荐
相关产品推荐

