问个关于递归调用的问题,下面这个程序中两个return怎么理解啊,返回到哪里去的啊?

#include <conio.h>
#include <stdio.h>
long fun(int k)
{
if (k>0)
return (k*fun(k-1));
else if (k==0)
return 1L;
}
main()
{int k=10;
clrscr();
printf("%d!=%ld\n",k,fun(k));
getch();
}

第二个是边界,返回到K=0的时候。第一个return实际上是调用fun(k-1),调用到K=0能计算的时候才是真正返回,然后根据k*fun(k-1)计算返回的额值。每个 return返回的都是调用它的位置。就是说这个函数最后返回到的是main里面的fun(10);
就是fun(1) 使用第一个return,fun(1) = 1*fun(0) = 1*1=1;
fun(2) = 2*fun(1) = 2*1*fun(0)=2
fun(3) = 3*fun(2) = 3*2*fun(1) = 6
返回;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-02
return当然是返回到它调用的哪个地方啊。比如fun(10)调用时走到fun函数,里面的第一个return就是回到main里的fun()那块去,因为是递归,你可以看到k在不断减小当为0时return就返回到fun(0)而1*fun(0)的结果又返回到fun(1),将2*fun(1)返回到fun(2)....一直这样直到将10*fun(9)的结果返回到main里面的fun(10),这样懂了吗?(打字很幸苦)望采纳!
第2个回答  2012-07-02
这应该是求阶乘的程序吧
第一个return是递归展开 可以理解为 K!=K*(K-1)!
第二个return是出口条件 即当K=0时。K!=1
这么说不知道你能理解吗
第3个回答  2012-07-02
fun(10)
k 是10 大于0 调用fun(9)
k 是9 大于0 调用fun(8)
k 是8 大于0 调用fun(7)
k 是7 大于0 调用fun(6)
....................
k 是2 大于0 调用fun(1)
k 是1 大于0 调用fun(0)
0>0不成立了 之前都是 if分支 现在走 else if 分支
k==0 return 返回1
回到 fun(1)里面 调用fun(0) 的位置 k=1 ,fun(k-1)=fun(1-1)=fun(0)=1
相乘 1*1 return给 fun(2)里调用fun(1)的位置
同意 2*fun(2-1)=2*1
它又return 回到fun(3) 调用fun(2) 的地方.....
所以 是递归算阶乘....................本回答被提问者和网友采纳
第4个回答  2012-07-02
fun递归求阶乘。
如果k>0则返回 k * fun(k-1) //阶乘递归式
当k == 0 返回 1
相似回答