1 条题解
-
0
思路与算法
递归函数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