题目
在程序运行过程中,如果递归调用的层数过多,可能会由于( )引发错误。
答案:A
考点
解题思维
这题其实考的是内存管理的底层机制。拿到题先想:函数调用是怎么实现的?每次递归都会压栈,栈满了就崩了,所以直接锁定‘栈空间溢出’这个核心点。
常见错误
最容易掉进‘堆’这个坑,因为堆和栈都是内存区,学生容易混淆。其实堆是动态申请(new/malloc)的,跟函数调用框架没关系;还有中英文对应要分清,stack是栈,queue是队列,别把递归用的栈当成队列,那就全错了。
详细解析(节选)
考察知识点
函数与递归、递归函数、栈(stack)、内存管理
概念定义
- 栈(Stack):先进后出(LIFO)的数据结构。程序运行时,系统栈专门用来存函数调用的上下文(返回地址、局部变量、参数等)。
- 递归调用:函数自己调自己。每调一次,系统就在栈底压入一个全新的栈帧;返回时再弹出。
- 栈溢出(Stack Overflow):栈空间有限(通常1~8MB),递归层数太多,栈帧总大小超过容量,程序就崩了。
- 队列(Queue):先进先出(FIFO),跟递归调用完全没关系,是干扰项。
- 堆(Heap):动态内存分配区(C++里new/malloc用的),跟函数调用框架是两码事,别搞混。
同考点真题
- 第 24 题· NOIP 2008 提高组初赛试题 · 答案 1,3,2看解析 →
- 第 25 题· NOIP 2008 提高组初赛试题 · 答案 132/213/231/312/321/看解析 →
- 第 7 题· NOIP 2013 提高组初赛试题 · 答案 D看解析 →
- 第 3 题· CSP 2024 提高级第一轮 · 答案 C看解析 →
- 第 3 题· GESP 五级样题(C++ 组) · 答案 C看解析 →