GESP 五级 · GESP202609 C++ 五级 第 4 题

选择题 · 答案 C

← 整套速查表 GESP 五级 全部真题

题目

函数 gcd(int a, int b) 定义如下,则 gcd(105, 45) 的结果是(  )。

int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
答案:C

解题思维

看到递归函数直接联想到辗转相除法的标准实现。核心观察是每次递归把较大数替换为余数,直到余数为0。105%45=15,45%15=0,递归终止时返回15。这类题本质是考察对递归调用栈的理解,而非复杂计算。

常见错误

选项A把105%45算错成3,选项B把45%15算错成5,选项D误以为b=0时返回b。题目最阴险的是b=0的终止条件,很多考生会忽略递归的终止点,直接认为gcd(a,b)=a。

详细解析(节选)

1. 考纲定位

GESP五级算法模块,考察递归调用与辗转相除法的结合。命题人卡住的是考生对递归终止条件的敏感度——五级考生普遍能写出递归框架,但一到具体数值就慌神,这道题就是专门测试"能不能冷静算完递归链"。

2. 解题思维

看到递归函数直接联想到辗转相除法的标准实现。核心观察是每次递归把较大数替换为余数,直到余数为0。105%45=15,45%15=0,递归终止时返回15。这类题本质是考察对递归调用栈的理解,而非复杂计算。

3. 陷阱拆解

选项A把105%45算错成3,选项B把45%15算错成5,选项D误以为b=0时返回b。题目最阴险的是b=0的终止条件,很多考生会忽略递归的终止点,直接认为gcd(a,b)=a。

4. 反命题思维

如果把a,b换成质数如(7,13),gcd(7,13)会递归到gcd(13,7)->gcd(7,6)->gcd(6,1)->gcd(1,0)=1,答案变成1。若把终止条件改成b==1,则gcd(105,45)会返回1而不是15,题目难度会陡增。

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