c语言求n的阶阶乘
时间: 2025-02-14 19:02:46 浏览: 53
在 C 语言中,计算一个数 n 的阶乘通常使用循环结构,特别是当 n 较大时,因为直接递归可能会导致栈溢出。下面是一个递归和非递归版本的函数来求解:
**递归版本:**
```c
#include <stdio.h>
unsigned long long factorial(int n) {
if (n == 0 || n == 1) { // 0 和 1 的阶乘为 1
return 1;
} else {
return n * factorial(n - 1); // 递归调用自身
}
}
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
unsigned long long result = factorial(n);
if (result > ULLONG_MAX / n) { // 防止结果溢出
printf("阶乘过大,无法表示为无符号长整型\n");
} else {
printf("阶乘结果是: %llu\n", result);
}
return 0;
}
```
**非递归版本(迭代):**
```c
#include <stdio.h>
#include <limits.h>
unsigned long long factorial(int n) {
unsigned long long fact = 1;
for (int i = 1; i <= n; ++i) {
fact *= i;
}
return fact;
}
// ... 主函数部分同上
```
**注意:** 当 `n` 很大时,上述递归版本可能会造成栈溢出,并且计算较大的阶乘值会超出 `unsigned long long` 类型的最大范围。实际应用中,可以考虑使用 `long double` 或第三方库(如 GMP 库)来进行高精度计算。
阅读全文
相关推荐


















