GESP 五级 · GESP 202503 C++ 五级 第 7 题

选择题 · 答案 A

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

题目

在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。

答案:A

解题思维

递归问题关注两点:① 递归边界(终止条件);② 递归关系(递推公式)。分析时展开前几步即可看出规律。

常见错误

注意递归深度过大会导致栈溢出。递归必须包含终止条件,否则造成无限递归。

详细解析(节选)

【考点】递归调用机制|系统栈空间|栈溢出

🎯 考纲定位 本考点位于 GESP 五级《数据结构与算法》模块,专门考察递归执行时的内存机制。命题人设计此题,就是要卡住那些“只看过递归代码但不懂底层实现”的考生——他们往往把递归当成普通循环处理,误以为递归只是函数调用,而忽略每次调用都会占用系统栈空间。

🧠 解题思维 看到“递归调用”先联想函数入栈:每次函数调用都会在系统栈上压入一个栈帧(包含参数、局部变量和返回地址)。递归的本质是不断压栈、出栈,若层数超过系统栈上限,必然触发栈溢出。排除其他选项——堆空间用于动态内存分配(new),队列是 FIFO 数据结构,链表是节点链接方式,它们与递归的调用栈机制无直接关联。

🪤 陷阱拆解 选项 B(堆空间溢出)是典型陷阱——堆用于动态内存分配(new/malloc),递归调用并不占用堆空间。选项 C、D(队列、链表)更是概念偷换,它们属于数据结构范畴,与函数调用的底层机制无关。题目最阴险的细节在于“系统分配的”四字限定:递归的栈帧由操作系统直接分配,而非程序员手动管理,若只背“递归会溢出”而不理解“为什么是栈”,就会误选堆或队列。

🔄 反命题思维 若把题干改成“循环次数过多会溢出吗”,答案立刻反转——循环由寄存器计数,不会栈溢出;若改成“递归层数过多但堆空间不足”,依然选 A,因为递归栈帧只占系统栈。刷到同类题时,先问自己“命题人想考我什么”,是考递归机制、内存分配方式,还是考数据结构混淆?

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