1 条题解

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

    思路与算法

    递归函数F(k)在k=0时返回x,否则先求F(k−1),再返回sqrt(k+F(k−1))。逐层从内向外展开,使用long double并输出两位小数。

    正确性说明

    最内层基例是x。假设F(k−1)等于前k−1层嵌套根式,则在外面加k并开平方,正好构成第k层定义。由归纳最终返回f(x,n)。x非负,所有根号内量至少为1,均有合法非负实根。每层对内层扰动的放大率至多1/2,舍入误差不会随层数指数放大。

    复杂度

    初始化O(1),递归n+1层,每层一次加法和平方根,时间O(n),递归栈O(n)。

    易错点

    先计算内层再加当前k,不要把x重复加入每一层。f(x,0)=x不是0。源题列举两组示例不代表只能硬编码两组结果;本地修订域和误差已明确。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    long double x;
    long double f(int n) {
        if (n == 0)
            return x;
        return sqrtl(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
    2072
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者