题目
在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。
答案:A
考点
递归函数
解题思维
这题考递归和内存管理。拿到题先想函数调用机制:每次调用都在栈上压栈帧,递归就是层层压栈,层数多了栈就满了,直接选栈溢出。
常见错误
很多同学一看到“溢出”就慌,容易把堆、队列、链表都混进来。其实递归只和栈有关,堆是动态申请那块,队列是排队,链表是节点指针,跟栈帧没关系。另外有些同学会纠结“栈溢出是不是系统分配的”,其实栈就是系统(或运行时环境)专门划的一块固定区域,层数太多确实会耗尽这块空间。
详细解析(节选)
考点:递归与栈溢出
递归函数每次调用自身时,系统在栈上分配新的栈帧(存参数、局部变量、返回地址)。栈空间有限(通常几MB),递归层数太多→栈满→栈溢出(Stack Overflow)。
命题视角
命题人爱考“递归=栈”这个对应关系,喜欢用“层数过多”这种直观描述来指向栈溢出,同时用堆、队列、链表做干扰项,看你是否真的理解函数调用栈的工作原理。
同考点真题
- 第 12 题· NOIP 2007 普及组初赛试题 · 答案 A看解析 →
- 第 16 题· NOIP 2007 普及组初赛试题 · 答案 D看解析 →
- 第 28 题· NOIP 2007 普及组初赛试题 · 答案 return(dr<tr+s)&&(dc<tc+s)dr<tr+s&&dc<tc+schessboard(tr,tc,tr+s-1,tc+s-1,s)chessboard(tr,tc+s,tr+s-1,tc+s,s)chessboard(tr+s,tc,tr+s,tc+s-1,s)chessboard(tr+s,tc+s,tr+s,tc+s,s)看解析 →
- 第 20 题· NOIP 2007 提高组初赛试题 · 答案 AC看解析 →
- 第 11 题· NOIP 2008 普及组初赛试题 · 答案 D看解析 →