1 条题解
-
0
思路与算法
把公式图片写成递归F(0)=x,F(k)=x/(k+F(k−1))。从基例逐层返回,long double保存实数,输出两位小数。
正确性说明
k=0时基例与公式最内层相同。若F(k−1)是内层连分式,则以k+F(k−1)作分母、x作分子,得到新增一层后的原定义。按归纳F(n)正确。因为x≥0且k≥1,每一层分母≥k>0,计算不涉及除零。
复杂度
初始化O(1),每个k恰计算一次,时间O(n),递归栈O(n)。
易错点
x/(1+x)是第一层;不要把f0误写成0,不能把分子换成k。样例x=1,n=2为1/(2+1/2)=0.4。x=0各层均为0,原图现已完整转为文字公式。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; long double x; long double f(int n) { if (n == 0) return x; return x / (n + f(n - 1)); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> x >> n; cout << fixed << setprecision(2) << f(n) << '\n'; }
- 1