如何理解函数的递归调用

怎么理解函数的递归调用?
大家早上好!我有一个关于函数的递归调用的程序。谁能帮我解一下。
#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


------解决方案--------------------
想想等差等比数列,应该可以理解吧
------解决方案--------------------

單步執行,看看是什麼的過程。