CSP-J 入门级 · CSP 2024 入门级第一轮 第 18 题

阅读程序 · 答案 BABCD · 考点:递归函数、函数定义与调用

← 整套速查表 CSP-J 入门级 全部真题

题目

第 3 题

#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;
}

判断题

1. 当输入为 2 3 时,customFunction(2, 3) 的返回值为 $64$。( ) 2. (本题为错题,请同时选择【正确】和【错误】获得对应分数)当 $b$ 为负数时,customFunction(a, b) 会陷入无限递归。( ) 3. (本题为错题,请同时选择【正确】和【错误】获得对应分数)当 $b$ 的值越大,程序的运行时间越长。( )

单选题

1. 当输入为 5 4 时,customFunction(5, 4) 的返回值为( )。 2. 如果输入 x=3 和 y=3,则程序的最终输出为( )。 3. (4 分)若将 customFunction 函数改为 return a + customFunction(a-1, b-1);,并输入 3 3,则程序的最终输出为( )。

答案:BABCD

考点

递归函数函数定义与调用

解题思维

这题核心是读懂递归:customFunction(a,b) 其实是把 a 加了 b+1 次,也就是 a×(b+1)。拿到题先别急着算,把递归展开写几层,一眼就能看出规律,再套进题目给的输入值里算就行。

常见错误

学生最容易把 customFunction(a,b) 当成 a^b 或者 a×b,结果全错;还有看到“本题为错题,请同时选择正确和错误”这种特殊指令时,机械地只选一个,忘了题目要求两个都选;另外在改函数版本时,容易忽略边界条件 b==0 的返回值,导致最后结果算偏。

详细解析(节选)

考点与概念

这题考的是递归函数的理解与调用,以及递归深度的直观感受。递归说白了就是函数自己调用自己,每次调用把问题拆小一点,直到碰到一个明确的“停止条件”(本题是 b==0),然后一层层把结果拼回去。

customFunction(a, b) 的定义是:

我们把它展开看看:

所以这个函数本质上就是用递归实现了“a 乘以 (b+1)”。

命题视角:爱挖的坑

命题人特别喜欢在递归题里埋几个坑: 1. 误以为结果是 a^b 或 a×b——学生看到 a 和 b 两个参数,下意识想乘法或幂,结果全错; 2. 特殊指令陷阱——题目明确说“本题为错题,请同时选择【正确】和【错误】”,很多学生只选一个,或者根本看不懂这种反常识的指令; 3. 改函数后的边界——把递归改成 a + customFunction(a-1, b-1) 时,学生容易忽略 b==0 时返回的是 a(此时 a 可能已经是 0),导致最后结果算偏。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断