用C语言打印1到5的阶乘值。
{static int f=1;
f=f*n;
return(f);
}
main()
{int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
第三行的 f=f*n 当main中 i=3时,不就是f=1*3 了吗,为啥是 3!
第三行的 f=f*n 改成f=fac(n-1)*n 用
递归调用怎么不行啊??? 展开
正确:#include<stdio.h>
int fac(int n)
{
static int f=1;
f=f*n;
return(f);
}
void main()
{
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
所谓递归是不断的调用自己,本身函数设为fac(int n),f=f*n,
如果改成f=fac(n-1)*n,就不是递归了,应为你调用的不是本身。
扩展资料:
c语言中阶乘的精确值
对于大数的操作,可能超出int,甚至long的表示范围,对此,可以使用数组来存储大数,下列代
码为求1000以内数的阶乘的代码,代码如下:
#include <stdio.h>#include<string.h>const int max=3000;int main()
{ int f[3000];//存放最终的结果
int i,j,n,c,tem;
memset(f,0,sizeof(f));
scanf("%d",&n);
f[0]=1; for(i=2;i<=n;i++)
{
c=0; for(j=0;j<max;j++)
{ tem=i*f[j]+c; c=tem/10; f[j]=tem%10; } } for(j=max-1;j>=0;j--) if(f[j]!=0) break; for(i=j;i>=0;i--) printf("%d",f[i]); printf("\n"); return 0;
int fac(int n)
{
static int f=1;
f=f*n;
return(f);
}
void main()
{
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
所谓递归是不断的调用自己,本身函数设为fac(int n),f=f*n,
如果改成f=fac(n-1)*n,就不是递归了,应为你调用的不是本身。