042. 编写递归函数计算阶乘

在C语言中,递归是一种常见的方法来实现阶乘计算。阶乘的定义是:一个正整数 n 的阶乘 n! 是从 1 到 n 的所有正整数的乘积,其中 0!=1。

代码实现

#include <stdio.h>

// 定义递归函数计算阶乘
long long factorial(int n) {
    if (n < 0) {
        printf("输入的数字必须是非负整数!\n");
        return -1; // 返回一个错误标志
    }
    if (n == 0 || n == 1) {
        return 1; // 递归终止条件
    }
    return n * factorial(n - 1); // 递归调用
}

int main() {
    int num;
    printf("请输入一个非负整数:");
    scanf("%d", &num);

    long long result = factorial(num);
    if (result != -1) {
        printf("%d 的阶乘是:%lld\n", num, result);
    }

    return 0;
}

代码说明

  1. 递归函数 factorial

  2. 如果输入的数字小于 0,函数会输出错误信息并返回 -1

  3. 如果输入的数字是 0 或 1,函数返回 1,这是阶乘的递归终止条件。

  4. 对于其他正整数 n,函数会调用自身计算 n×(n−1)!。

  5. 主函数 main

  6. 提示用户输入一个非负整数。

  7. 调用 factorial 函数计算阶乘。

  8. 如果返回值不是 -1,则输出结果。

示例运行

输入:

请输入一个非负整数:5

输出:

5 的阶乘是:120

输入:

请输入一个非负整数:-3

输出:

输入的数字必须是非负整数!

注意事项

  1. 递归深度

  2. C语言的递归深度是有限的,对于非常大的输入值(如 n>20),可能会导致栈溢出错误。如果需要处理大数阶乘,可以考虑使用迭代方法或使用高精度库。

  3. 数据类型

  4. 阶乘的结果增长非常快,因此使用 long long 类型来存储结果,以避免溢出。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)