函数 f(int n) 定义如下,则 f(4) 的结果是( )。
int f(int n) {
if (n == 1)
return 1;
return n + f(n - 1);
}递归题先找终止条件,再想每层返回什么。这题 n=1 时直接返回 1,其他情况返回 n+f(n-1),本质是把 1~n 累加。看到 f(4) 就按展开顺序一层层算:f(1)=1,f(2)=2+1=3,f(3)=3+3=6,f(4)=4+6=10。同类题通法:先写递推式 f(n)=n+f(n-1),再代入数值逐层展开,最后汇总。
选项 A 把 f(4) 当成只返回 4,忽略了递归调用;B 是 4+3 漏了后面两项;C 是 4+3+2 漏了 +1;D 才是完整累加。学生常犯两类错:一是忘记递归会一直打到 n=1 才停,二是展开时漏掉某一层返回值,导致少加 1 或 2。
本题考查递归,位于 GESP 五级《算法》模块。命题人放这道题,就是要卡住那些只会背"递归就是自己调用自己"却不会真正展开求值的考生——五级不再考复杂递归,但必须能准确算出简单递归函数的返回值,这是后续动态规划、树遍历的基础能力。
看到 f(4) 先想:终止条件是什么?n=1 时返回 1。那 f(2) 呢?2+f(1)=2+1=3。f(3) 呢?3+f(2)=3+3=6。f(4) 呢?4+f(3)=4+6=10。递推式 f(n)=n+f(n-1) 本质就是 1~n 的累加和,代入 n=4 得 1+2+3+4=10。这一类题通法:先写出递推式,再代入数值逐层展开,最后汇总。