正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2024 第一轮真题 › 第 28 题
CSP-J 2024 第一轮 第 28 题:程序(三):b为负数时是否会无限递归
题目
#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;
}
本小题
(本题选“正确”或“错误”均给分)当 $b$ 为负数时,customFunction(a, b) 会陷入无限递归。( )
选项
- √. 正确
- ×. 错误
答案
√ 或 ×(均给分)
题解
按这道题考查递归的通常思路,应选“√ 正确”;题目已注明,两种选择都给分。
递归的终止条件是 b == 0,每次递归却把 b 变成 b - 1。例如从 b = -1 开始:
``text customFunction(a, -1) → customFunction(a, -2) → customFunction(a, -3) → …… ``
b 越来越小,无法到达 0,因此递归无法正常结束。注意,前面的 a + 不会改变这个过程。
不过,严格从 C++ 的实际运行看,它并不会真的永远运行:通常会因递归过深而栈溢出;如果 b - 1 超出 int 的范围,还会产生未定义行为,不能保证后续结果。这使“无限递归”的表述不够严谨。
你只需抓住核心:负数不断减 1,无法达到终止条件 b == 0。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号