在 C 语言中,递归的实现方式通常会占用更多的栈空间,可能导致栈溢出。
递归问题关注两点:① 递归边界(终止条件);② 递归关系(递推公式)。分析时展开前几步即可看出规律。
注意递归深度过大会导致栈溢出。递归必须包含终止条件,否则造成无限递归。
【考点】递归|调用栈|栈溢出
GESP五级算法模块明确考查递归的内存开销。命题人卡住的是初学者对「递归=迭代」的朴素直觉,以为循环不用栈。其实每次递归调用都会压栈,深递归必然栈溢出风险。这是五级考生最常见的认知偏差,题目旨在检验对递归底层机制的理解。
看到「递归占用更多栈空间」立刻想到函数调用机制——每层递归在调用栈上分配独立栈帧。若层数过深(如斐波那契递归),栈帧累积会突破系统栈上限。对比迭代方案,循环不产生新栈帧,空间复杂度更优。答案选A符合C语言运行时规范。
B选项是典型「绝对化陷阱」。命题人利用考生对递归效率的刻板印象:以为递归只是写法不同,忽略底层调用栈开销。若考生只背「递归快、迭代慢」,就会误判。这里需警惕「更多」并非「必溢出」,但「可能导致」表述严谨。
若改条件为「尾递归优化后栈空间不变」,答案会变;若问「递归与迭代空间复杂度比较」,需具体分析。刷到同类题先问:命题人想考我递归的栈开销、尾递归优化,还是循环不变量?