C语言阶乘函数详解:从递归到迭代,性能优化及常见错误222


阶乘 (factorial) 是一个在数学和编程中都非常常见的运算,它表示一个正整数n的阶乘,记作n!,其值为从1到n所有正整数的乘积。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。 在C语言中,实现阶乘函数有多种方法,本文将详细探讨几种常见的方法,分析它们的优缺点,并给出性能优化建议以及常见错误的解决方法。

一、递归实现

递归是解决阶乘问题的一种非常直观的方法。其核心思想是将n! 的计算分解为 n × (n-1)!,直到 n 等于 1 (1! = 1) 为止。C语言代码如下:```c
#include
long long factorial_recursive(int n) {
if (n < 0) {
return -1; // 处理负数输入
} else if (n == 0) {
return 1; // 0! = 1
} else {
return n * factorial_recursive(n - 1);
}
}
int main() {
int num;
printf("请输入一个非负整数:");
scanf("%d", &num);
if (factorial_recursive(num) == -1) {
printf("输入错误:阶乘参数不能为负数");
} else {
printf("%d 的阶乘是: %lld", num, factorial_recursive(num));
}
return 0;
}
```

递归实现简洁易懂,但存在一些缺点:对于较大的n,会产生大量的函数调用,导致栈溢出。此外,递归的效率通常低于迭代。

二、迭代实现

迭代方法避免了递归的缺点,它使用循环来计算阶乘。效率更高,也避免了栈溢出的问题。```c
#include
long long factorial_iterative(int n) {
if (n < 0) {
return -1; // 处理负数输入
} else if (n == 0) {
return 1; // 0! = 1
} else {
long long result = 1;
for (int i = 1; i

2025-08-31


上一篇:C语言中输出数组元素下标及相关技巧

下一篇:C语言数学函数详解及应用示例