读书人

如何理解函数的递归调用

发布时间: 2012-02-12 17:16:33 作者: rapoo

怎么理解函数的递归调用?
大家早上好!我有一个关于函数的递归调用的程序。谁能帮我解一下。
#include "stdio.h"
main()
{int i=5;
printf("%d\n",sub(i));
}
sub(n) int n;
{
int a;
if(n==1) return 1;
a=n+sub(n-1);
return(a);
)

[解决办法]
依次调用sub(5),sub(4),sub(3),sub(2),sub(1)然后判断条件(n==1)成立返回。
间接递归调用
[解决办法]
递归就是一条吃掉自己尾巴的蛇.
循环是人, 递归是神.
[解决办法]
调用
sub(5),入栈
sub(4),入栈
sub(3),入栈
sub(2),入栈
sub(1)能够计算出值

然后,依次出栈。反向计算出最后的结果
[解决办法]
相当与从1加到5
[解决办法]
你要啥解?是这个程序的最终结果,还是整个调用的过程?
[解决办法]
结果是15了
递归的过程楼上已经解释的很清楚了
[解决办法]
递归就像穿衣服
先穿上的总是最后脱掉
[解决办法]
函数在经过编译后就只剩指令了,建议看看汇编语言书里程序流程控制的部分。
递归函数编译后相当于下面的伪代码序列:

... ;以上是程序其他部分

Fun:
... ;函数其他语句编译后生成的指令序列
;以下三句为递归退出条件判断伪代码:如果条件成立则跳出递归,否则调用函数本身,即跳转到Fun处继续执行递归函数代码

.if(条件为真) then goto end
else goto Fun
.endif
... ;函数其他语句生成的指令序列

End:
... ;当递归函数条件成立时函数结束,跳到此处继续执行程序
[解决办法]
sub(5) = 5 + sub(4)
sub(4) = 4 + sub(3)
...
sub(1) = 1//结束条件
[解决办法]
递归就是栈的运用.
先进后出.呵呵.要找到基本项.然后再求值
[解决办法]
理解递归只需要理解两点:

1.函数调用时现场被保存进栈里。
2.栈就是先进而后出。


[解决办法]
直接或间接调用函数本身!
[解决办法]
相当与从1加到5
[解决办法]
请问在
sub(n) int n;
{
int a;
if(n==1) return 1;
a=n+sub(n-1);
return(a);
)
是什么意思?有点不明白,有什么用?应该不需要吧。
[解决办法]
sub(5)
/ \
5 + sub(4)
/ \
4 + sub(3)
/ \
3 + sub(2)
/ \
2 + sub(1)=1


[解决办法]
想想等差等比数列,应该可以理解吧
[解决办法]

步行,看看是什的程。

读书人网 >C语言

热点推荐