思路分析:
我们要求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型,增大数值的表示范围。