GESP 五级 · GESP 五级样题(C++ 组) 第 4 题

选择题 · 答案 C

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

题目

有关下面 C++ 代码说法错误的是( )。 ![](https://cdn.luogu.com.cn/upload/image_hosting/ixqofqat.png)

答案:C

解题思维

这题考循环与递归的本质区别,别被‘等价’忽悠了。拿到题先看factA的for循环和factB的函数自调,再想栈空间限制,最后识别C选项‘任何’这种绝对化陷阱。

常见错误

容易把‘理论等价’当成‘实际可改写’,忽略递归依赖调用栈保存现场的特性。还有学生会死算100的阶乘,忘了栈溢出问题。

详细解析(节选)

【考点】循环与递归|阶乘计算|程序执行结果

1. 考纲定位:GESP五级《C++编程》模块中“循环与递归”“基本算法实现”。命题人专门挖这个坑,是因为“递归与循环等价吗”是五级考生最容易混淆的伪命题——看似高级概念,实则考执行机制理解。

2. 解题思维:factA用for循环,迭代求阶乘;factB函数自我调用,递归实现。两者逻辑等价,都能输出120(5!)。输入100时,递归深度达100层,远超C++默认栈空间(通常1-8MB),必然栈溢出,故D正确。C选项说“任何递归都可以用循环改写”是典型绝对化陷阱,命题人考察的是考生是否理解“可改写性”不等于“实际可执行性”。

3. 陷阱拆解:A、B、D三个选项都是对代码行为的直接描述,正确无误。C选项的陷阱在于把“理论可行”偷换为“实际可行”——虽然尾递归优化或栈展开等技巧让某些递归能转循环,但并非所有递归程序都能改写(例如依赖调用栈状态的递归、栈溢出场景)。命题人利用考生“递归就是循环的另一种写法”的片面认知,设置了这个绝对化表述。

4. 反命题思维:命题人真正想考的是“递归与循环的执行机制差异”,而非简单改写。如果把“任何”改成“大多数”,答案就会变;如果把“循环”改成“循环+栈展开”,C就可能正确。刷到类似题时,先问自己:命题人想考我什么?是概念辨析、执行细节,还是绝对化陷阱?

5. 考频趋势:递归函数在题库共考过115题,覆盖8个考试级别(2007-2026);逐年分布:2007年4题、2008年4题、2009年2题、2010年2题、2012年2题、2013年3题、2014年1题、2019年2题、2020年1题、2021年5题、2022年2题、2023年7题、2024年25题、2025年15题、2026年18题、null年22题;分赛事:GESP五级35题、CSP入门级32题、GESP六级12题、NOIP提高组初赛10题、CSP提高级9题、NOIP普及组初赛8题、GESP七级7题、GESP八级2题。递归是高频考点,且近年(2024-2026)考频显著上升,说明命题人持续重视对递归本质的考察。

6. 预测:基于递归函数近年考频上升的趋势,未来GESP五级、六级及CSP入门级仍会高频出现递归相关题目,命题角度可能从“能否改写”转向“栈空间优化”或“尾递归识别”。暂无足够依据预测具体题型变化。

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