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;
}
代码说明
-
递归函数
factorial
: -
如果输入的数字小于 0,函数会输出错误信息并返回
-1
。 -
如果输入的数字是 0 或 1,函数返回 1,这是阶乘的递归终止条件。
-
对于其他正整数 n,函数会调用自身计算 n×(n−1)!。
-
主函数
main
: -
提示用户输入一个非负整数。
-
调用
factorial
函数计算阶乘。 -
如果返回值不是
-1
,则输出结果。
示例运行
输入:
请输入一个非负整数:5
输出:
5 的阶乘是:120
输入:
请输入一个非负整数:-3
输出:
输入的数字必须是非负整数!
注意事项
-
递归深度:
-
C语言的递归深度是有限的,对于非常大的输入值(如 n>20),可能会导致栈溢出错误。如果需要处理大数阶乘,可以考虑使用迭代方法或使用高精度库。
-
数据类型:
-
阶乘的结果增长非常快,因此使用
long long
类型来存储结果,以避免溢出。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)