MST
星途 面试题库

面试题:C语言递归实现阶乘

请用C语言编写一个递归函数来计算整数n的阶乘。例如,当n为5时,返回值应为120(即5 * 4 * 3 * 2 * 1)。并说明递归函数的执行过程和注意事项。
21.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 递归函数计算阶乘
int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

递归函数执行过程

  1. 初始调用:当调用factorial(n)时,首先检查n是否为0或1。如果是,则直接返回1,因为0! 和 1! 都等于1。
  2. 递归调用:如果n大于1,则函数会进行递归调用factorial(n - 1)。这意味着函数会不断调用自身,每次将n减1,直到n等于0或1。
  3. 返回值计算:每次递归调用返回时,会将当前的nfactorial(n - 1)的返回值相乘,最终得到n!的结果。

注意事项

  1. 递归终止条件:递归函数必须有一个明确的终止条件,否则函数会无限递归,导致栈溢出错误。在上述代码中,n == 0 || n == 1就是终止条件。
  2. 栈空间使用:每次递归调用都会在栈上分配空间,对于较大的n,可能会耗尽栈空间。可以考虑使用迭代方式(循环)替代递归,以避免栈溢出问题。
  3. 性能问题:递归函数由于函数调用开销和栈操作,可能在性能上不如迭代实现,尤其是在处理大数据时。