c函数的递归调用问题。如下面的代码。当满足f>1时,f=ff(n-1)*n;这个表达式是如何算n*(n-1)!的。

longff(intn){longf;if(n<0)printf("n<0,inputerror");elseif(n==0||n==1)f=1;elsef=ff(n-1... 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);
} 不知道详细过程。求高手解答。
展开
White_MouseYBZ
2011-11-05 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:7162万
展开全部
我觉着自己是清楚的,但要给你说清楚可觉得还有一定难度,试一试,供参考。为方便述说,把你的代码的else if(n==0||n==1) f=1;称(1),else f=ff(n-1)*n;称(2),return(f);称(3)。
以n=3调用为例。
用3调用,直接到了(2),又以n-1=2调用自身再到(2);这时n=2了,又用n-1=1调用(这个过程中,(2)后面的*n都没有“来得及”做,只是在前面的ff(n-1)中一层一层地调用)。这时,(1)条件成立(n=1)了,所以例f=1,并用(3)句返回。返回到哪里去了?这是理解的关键之处——返回到(2)句用n-1=1调用的那一层上!这时返回值f=1,它要乘以n,n是多少呢?这又是关键——n=2,因为这一层是用n-1=1调用的,n自然等于2!那么(2)句f=ff(n-1)*n的实质就是f=f*n=1*2=2,接下来,用(3)将f=2返回。这次返回到(2)句n-1=2那一层上,这时n=3,与上面的过程一样得f=f*n=2*3=6,接着用(3)句返回。返回到哪里?这次返回到主调程序了,因为n=3是主程序调用的。
看来这段代码是一个整数阶乘递归算法。
(1)句的判断条件n==0干什么呢?它是解决数学上的特殊规定0!=1的,当用0调用时,直接由
(1)判断返回f=1。
lanya_tx
2011-11-05 · TA获得超过915个赞
知道小有建树答主
回答量:336
采纳率:0%
帮助的人:173万
展开全部
输入n,
返回f=ff(n-1)*n 用到了ff(n-1),于是再次调用函数ff(n-1),返回ff(n-2)*(n-1)
也就是f=ff(n-2)*(n-1)*n, 然后ff(n-2)继续调用ff函数,返回ff(n-3)*(n-2);
这样一直下去,调用调用ff(1),这时就直接输出1了,而不会继续调用ff函数。
从而最终输出为f=n*(n-1)*(n-2)*...*2*f(1)=n*(n-1)...*2*1=n!;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式