谁能解释一下这个C语言程序

C语言的递归函数应用longfun(intn){longf;if(n<0){printf("%d<0,inputerror.",n);}else{if(n==0||n==... C语言的递归函数应用
long fun(int n)
{
long f;
if(n<0)
{
printf("%d<0,input error.",n);
}
else
{
if(n==0||n==1)
{
f=1;
}
else
{
f=fun(n-1)*n;
}
}
return(f);
}
main()
{
int n;
long a;
printf("input a inteager number:");
scanf("%d",&n);
a=fun(n);
printf("%d!=%ld",n,a);
getch();
}

其中的
else
{
f=fun(n-1)*n;
}
这一段不解?
如果我输入的是4,那么它是怎样计算1*2*3*4的值的?
展开
 我来答
百度网友f2077e710
2010-07-15
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
这是递归调用 语句 f=fun(n-1)*n; 是指在函数中调用函数本身,同时所传的参数减一,直到n=1时,返回值,并一步一步的返回,可以在草稿纸上写若干个该函数帮助理解,再带回返回值,就可以了
妫原uv
2010-07-06 · TA获得超过285个赞
知道小有建树答主
回答量:395
采纳率:0%
帮助的人:143万
展开全部
这是递归调用。也就是说,你输入的是4,会有一个返回值回到fun函数继续执行这个函数,直到return (f),结束这个函数。
当n=4,在fun函数中是执行f=fun(n-1)*n语句。而其中还有fun(n-1),这就关系递归调用了。将n-1的值也就是3,同上执行语句,以此类推就是4*3*2*1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lsy_forever
2010-07-06 · TA获得超过400个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:194万
展开全部
自身调用,这就是递归啊。具体就是,进入递归前保存断点到堆栈,完成后返回断点。也就是说,4的时候调用n-1也就是3,再调用2,调用1,然后1的时候没有递归,一共用了3个堆栈空间,是4,3,2的断点,再分别按顺序返回断点运行,返回时带结果和参数,最后输出总结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式