c语言设计求n!(n为正整数)的非递归算法和递归算法
时间: 2024-09-23 16:08:49 浏览: 64
c语言-阶乘算法(迭代和递归).docx
在C语言中,计算阶乘(n!)有递归和非递归两种常见的算法。
**非递归算法(迭代法)**:
```c
#include <stdio.h>
unsigned long long factorial(int n) {
if (n == 0 || n == 1)
return 1;
unsigned long long result = 1;
for (int i = 2; i <= n; ++i)
result *= i;
return result;
}
int main() {
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
printf("Factorial of %d is %llu\n", n, factorial(n));
return 0;
}
```
在这个非递归版本中,我们通过循环逐个乘以从2到n的所有数字,最终得到结果。
**递归算法**:
```c
#include <stdio.h>
unsigned long long factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
int main() {
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
printf("Factorial of %d is %llu\n", n, factorial(n));
return 0;
}
```
递归版则是将问题分解成规模较小的问题,即n! = n * (n - 1)!,直到基本情况n=0或1,然后逐层返回并计算结果。
阅读全文