1 条题解

  • 0
    @ 2026-10-27 12:58:43

    思路与算法

    把公式图片写成递归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

    信息

    ID
    2073
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者