用递归与非递归实现阶乘
方法一:用递归实现
求n的阶乘:
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fac(int n)
{
int f = 0;
if (n == 1 || n == 0)
{
f = 1;
}
else if (n<0)
{
printf("n<0,数据错误!");
}
else
{
f = fac(n - 1)*n;
}
return f;
}
int main()
{
int n = 0;
int ret = 0;
printf("请输入一个数:");
scanf("%d", &n);
ret = fac(n);
printf("%d != %d\n", n, ret);
return 0;
}
用递归方法实现,存在一个缺陷,就是重复计算,虽然我们可能感觉不到,但是如果输入一个足够大的数字,他的运算速度就会慢下来。
方法二:用非递归实现
求n的阶乘:
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int fac = 1;
printf("请输入一个数:");
scanf("%d", &n);
if (n < 0)
{
printf("n<0,数据错误!");
}
for (i = 1; i <= n; i++)
{
fac *= i;
}
printf("%d!=%d\n",n ,fac);
return 0;
}
这种方法,利用循环解决了求解阶乘的问题,也是比较容易理解的一种方法。
结果如下:
两种方法相比,不采用递归方法,更加容易!