面试题答案
一键面试递归函数示例
#include <iostream>
// 递归函数计算阶乘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
堆栈溢出可能原因
- 缺少终止条件:如果递归函数没有正确的终止条件,例如上述
factorial
函数中没有if (n == 0 || n == 1)
这部分,函数会不断调用自身,导致栈空间被耗尽。 - 递归层次过深:即使有终止条件,但如果递归调用的层次非常深,由于栈空间有限,也可能导致堆栈溢出。例如在处理非常大的
n
值时,factorial
函数不断调用自身,栈上会积累大量的函数调用记录,最终耗尽栈空间。