面试题答案
一键面试#include <iostream>
// 计算阶乘的递归函数
int factorial(int n) {
// 递归终止条件
if (n == 0 || n == 1) {
return 1;
}
// 递归调用
return n * factorial(n - 1);
}
这样设计终止条件的原因是:根据阶乘的数学定义,0! 和 1! 都等于1。当 n
为0或1时,不需要再继续递归计算,直接返回1即可,这是递归结束的标志。
如果终止条件设计不当,比如忘记写终止条件,那么函数会无限递归下去。由于每次递归调用都会占用栈空间,最终会导致栈溢出(Stack Overflow)错误,程序崩溃。例如:
// 错误示例,没有终止条件
int badFactorial(int n) {
return n * badFactorial(n - 1);
}
当调用 badFactorial
函数时,由于没有终止条件,它会一直递归调用自身,直到栈空间耗尽。