c语言用递归法计算n

兄弟姐妹,打扰一下,c语言用递归法计算n?

#include<stdio.h>
long ff(int n)
{
long f;
if(n<0)printf("n<0,input error");
else if(n==0||n==1)f=1;
else f=ff(n-1)*n;
return(f);
}
int main()
{
int n;
long y;
printf("input a inteager number:\n");
scanf("%d",&n);
y=ff(n);
printf("%d!=%1d",n,y);
return 0; /*程序返回值为0*/
}
翻译
最新回答
好好做人

2025-03-28 00:28:22

long ff(int n)       //函数作用是计算N的阶乘                    

 long f;
 if(n<0)printf("n<0,input error");//n不能为负数
 else if(n==0||n==1)f=1;//这里使ff(0)和ff(1)等于1
 else f=ff(n-1)*n;//这里使ff(n) = n * ff(n-1),重要,因为当形参n = n-1时,ff(n-1) = ff(n-2) * (n-1),所以这一步实际实现了n阶乘计算,即ff(n) = n * ff(n-1) = n * (n-1) * ff(n-2).....*ff(1) *ff(0),因为ff(0) == ff(1) == 1.所以ff(n) = n!实现。
 return(f);
}
唇角那吻痕

2025-03-28 00:51:26

问题呢?程序是对的。
追问
翻译一下  谢谢
追答
递归调用,就是调用函数本身。
比如说,你输入5,调用ff(5),然后ff(5)有调用ff函数,使得ff(5)=ff(4)*5;

然后ff(4)又调用自己,使得ff(4)=ff(3)*4;
……
就这样依次调用到ff(2)=ff(1)*2=1*2;
然后返回值一层一层返回过去,ff(5)=1*2*3*4*5,也就是5的阶乘,返回给主函数。
就是这样了,普通的函数调用都是调用别的函数,递归调用就是调用自己。