用C语言设计求n!(n为正整数)的递归算法
时间: 2024-09-24 08:21:45 浏览: 48
在C语言中,我们可以使用递归来设计计算阶乘(n!)的算法。递归是一种解决问题的技术,它将大问题分解成更小的相似问题来解决。下面是一个简单的递归函数示例:
```c
#include <stdio.h>
// 定义递归求阶乘的函数
long long factorial(int n) {
// 基本情况:0! 或 1! 的值为1
if (n == 0 || n == 1)
return 1;
// 递归情况:n! = n * (n - 1)!
else
return n * factorial(n - 1);
}
int main() {
int num;
printf("请输入一个正整数: ");
scanf("%d", &num);
// 检查输入是否合法
if(num < 0) {
printf("错误:阶乘只对非负整数有意义.\n");
return 1;
}
long long result = factorial(num);
printf("n! = %lld\n", result);
return 0;
}
```
在这个例子中,`factorial()`函数会一直递归调用自身,直到达到基本情况为止。然后,结果逐层返回到调用栈,最终得到完整的阶乘。
相关问题
c语言设计求n!(n为正整数)的非递归算法和递归算法
在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,然后逐层返回并计算结果。
用c语言编写设计求n!(n为正整数)的递归算法。 例:6!=6*5*4*3*2*1=720
#include <stdio.h>
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
printf("%d! = %d\n", n, factorial(n));
return 0;
}
阅读全文