Question 27
输入 2 3 时返回值判断
当输入为 `2 3` 时,`customFunction(2, 3)` 的返回值为 64。
正确答案
×
一句话考点
`customFunction(a, b)` 返回的是 `a * (b + 1)`,不是平方后的结果。
Shared Context
阅读程序(3)递归累加函数
程序定义了一个递归函数,再对结果平方,考点是递归式理解与终止条件。
递推意义
把递归式写成数学关系 `f(a, b) = a + f(a, b - 1)`,最容易看出它等于 `a * (b + 1)`。
终止条件
只在 `b == 0` 时停下,因此负数会继续往更小的方向递归,永远到不了 0。
输出陷阱
题干有的问返回值,有的问最终输出,后者还要再平方一次。
cpp
共享程序片段#include <iostream>
#include <cmath>
using namespace std;
int customFunction(int a, int b) {
if (b == 0) {
return a;
}
return a + customFunction(a, b - 1);
}
int main() {
int x, y;
cin >> x >> y;
int result = customFunction(x, y);
cout << pow(result, 2) << endl;
return 0;
}题组阅读提醒
`customFunction(a, b)` 在 `b == 0` 时返回 `a`,否则返回 `a + customFunction(a, b - 1)`,所以本质是把 a 累加了 `b + 1` 次。
主程序里输出的是 `pow(result, 2)`,题目中既考函数返回值,也考最终输出值,两者不能混淆。
Prompt
题目与选项
当输入为 `2 3` 时,`customFunction(2, 3)` 的返回值为 64。
Quick Check
做题抓手
先判断题型
先确认陈述是在描述函数职责、输出值还是程序修改后的影响。
再核对边界
第一轮很爱在闭区间、下标偏移、递归终止条件和布尔返回值上设陷阱。
最后看输出层次
尤其是阅读程序题,要分清函数返回值、变量值和最终打印值是不是同一件事。
Explanation
详细讲解
Step 1
`customFunction(2, 3) = 2 + customFunction(2, 2) = 2 + 2 + customFunction(2, 1) = 2 + 2 + 2 + customFunction(2, 0)`。
Step 2
当 `b == 0` 时返回 2,所以函数返回值是 `2 + 2 + 2 + 2 = 8`。
Step 3
64 是主程序把 8 再平方后的最终输出,不是函数本身的返回值,因此题干错误,应填 `×`。
Pitfalls
易错点
- 把函数返回值和主程序最终输出混在一起。
- 没有展开到终止条件就凭感觉作答。
Extend
拓展补充
- 递归题一定先区分“函数值是什么”和“主程序最终打印什么”。
返回总览
回到整套试卷
返回题目总览页,继续从目录、知识图谱或其他分区进入。
所属分区
返回 阅读程序
回到首页对应分区,继续顺序刷题或查看同类知识点。
上一题
第 26 题
修改转移式后的输出
下一题
第 28 题
负数参数是否会无限递归