面试题答案
一键面试常见场景
在C++ 中,当递归函数没有正确的终止条件或者终止条件很难达到时,容易导致栈溢出。例如:
void recursiveFunction() {
recursiveFunction();
}
上述代码中,recursiveFunction
函数一直在调用自身,没有任何终止条件。
栈溢出原因
每次函数调用都会在栈上分配空间,用于存储函数的局部变量、参数等信息。当递归调用无限制地进行下去时,栈上分配的空间会不断增加,直到耗尽系统为栈分配的内存空间,从而导致栈溢出错误。
避免方法
可以使用迭代(循环)来代替递归。以计算阶乘为例,递归实现如下:
int factorialRecursive(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorialRecursive(n - 1);
}
}
使用迭代实现:
int factorialIterative(int n) {
int result = 1;
for (int i = 1; i <= n; ++i) {
result *= i;
}
return result;
}
通过迭代的方式,避免了递归调用带来的栈空间不断消耗的问题。