MST

星途 面试题库

面试题:C++ 递归函数终止条件设计之阶乘计算

请编写一个C++ 递归函数来计算阶乘。在函数中,清晰地设计递归的终止条件。并解释为什么这样设计终止条件,同时分析如果终止条件设计不当可能会出现什么问题。
40.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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 函数时,由于没有终止条件,它会一直递归调用自身,直到栈空间耗尽。