GESP 五级 · GESP 202409 C++ 五级 第 15 题

选择题 · 答案 C · 考点:递归函数

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

题目

当 $n = 7$ 时,下面函数的返回值为( )。

int fun(int n) {
    if (n == 1) return 1;
    else if (n >= 5) return n * fun(n - 2);
    else return n * fun(n - 1);
}
答案:C

考点

递归函数

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】递归函数|条件分支|基本运算

🎯 考纲定位 《GESP 考试大纲》五级函数模块核心考点。命题人卡住的是考生对"递归展开过程"的直观感受——五级考生往往能写出递归代码,但手算几步就乱套。

🧠 解题思维 看到递归函数第一步:识别终止条件(n=1)和递归条件(n≥5)。第二步:按条件分支逐步展开——7→5→3→2→1,关键观察是n≥5时减2而非减1,这导致递归树分叉。第三步:代入计算 7×5×3×2×1 = 210。通法:遇到递归题先画调用链,别急着写代码。

🪤 陷阱拆解 B选项840是典型"全用减1"错误:7×6×5×4×3×2×1 = 5040也不对,说明840来自某个中间分支误算。D选项420把n=7误判为else分支(7×6×5×2 = 420),卡住的是条件判断优先级。A选项105是只算了n=5分支的尾端:5×3×2×1 = 30,再乘以某个错误系数。最阴险的是n≥5条件——它让递归步长变化,不细看条件就全错。

🔄 反命题思维 若把n≥5改成n≥6,n=7会走else分支返回7×fun(6),fun(6)再走else分支,答案变成7×6×5×4×3×2×1 = 5040。刷到递归题先问:"这个条件到底控制哪部分递归?"

同考点真题

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