思路分析:
我们要求n!,n!=n*(n-1)!,直到递归终止条件1!=1,总结归纳公式如下:
执行过程
代码实现
#include <stdio.h>
int main()
{ int fac(int n); //fac函数声明
int n,y;
printf("输入一个整数:");
scanf("%d",&n); //输入要求阶乘的数
y=fac(n);
printf("%d!=%d\n",n,y);
return 0;
}
int fac(int n) //定义fac函数
{
int f;
if(n<0) //n不能小于0
printf("n<0,数据错误!");
else if(n==0||n==1) //n=0或,1时n!=1
f=1; //递归终止条件
else
f=fac(n-1)*n; //n>1时,n!=n*(n-1)
return(f);
}
注意事项
程序中的变量是
int
型,
int型数据分配
4
个字节,能表示的最大数为
2 147 483 647
,当
n=12
时,运行正常,输出为
479 001 600
。如果输入
13
,企图求
13!
,是得不到预期结果的,因为求出的结果超过了
int
型数据的最大值。可将
f,y
和
fac
函数定义为
float
或
double
型,增大数值的表示范围。