正在载入在线练习界面,本页内容可直接阅读…

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;
}
CSP-J 2024 第一轮 第 28 题 原题
原题扫描(页面加载后可直接在线作答)

本小题

(本题选“正确”或“错误”均给分)当 $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号