当 $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);
}仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】递归函数|条件分支|基本运算
🎯 考纲定位 《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。刷到递归题先问:"这个条件到底控制哪部分递归?"