对于C语言的递归还是懵懵懂懂,能帮我分析一下这段代码的执行流程吗,尽量详细一点?

#include <stdio.h>

long fun5(int n)
{
long s;
if((n==1)||(n==2))
s=2;
else
s=n+fun5(n-1);

return(s);
}

main( )

{
long x;
x=fun5(4);
printf("%ld",x);

}

这段代码的执行过程

主函数main调用fun5(4)

进入fun5(4) n==4,s=4+fun5(3)

进入fun5(3) n==3,s=3+fun5(2)

进入fun5(2) n==2,s==2,打印2,2--------s

返回 fun5(3) n==3,s=3+fun5(2)=3+2=5,打印3,5--------s

返回 fun5(4) n==4,s=4+fun5(3)=4+5=9,打印4,9--------s

返回main函数,打印9

完整的C语言程序如下

#include <stdio.h>

long fun5(int n){

 long s;

 if((n==1)||(n==2))

  s=2;

 else

  s=n+fun5(n-1);

 printf("%d\n",n);

 printf("%d--------s\n",s);

 return(s);

}

main(){

 long x;

 x=fun5(4);

 printf("%ld",x);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-05-31
fun5 函数,你一步一步看,
如果 n为1或者2时会返回 2
如果 n为其他时会返回 n + fun5(n-1)

那么我们可以写
fun5(1) = 2
fun5(2) = 2
fun5(3) = 3 + fun5(2) = 3 + 2 = 5
fun5(4) = 4 + fun5(3) = 4 + 3 + fun5(2) = 4 + 3 + 2 = 9
.....
你可以看到,每个等号调用fun5(n-1)函数
对于大的n会一步一步递归调用到小的n,直到n为2给出最后结果。
这就是递归。
第2个回答  2021-05-31
你这个应该有个退出的机制,如果没有,那,一直加下去了,可以递归一次后。判断s的值是否符合某个条件,比如大于几小于几,然后再返回?
第3个回答  2021-05-31

递归路线图:

f(4)= 4 + f(3)

f(3) = 3 + f(2)

f(2) = 2

反向带入

f(3) = 3+f(2)=3+2=5

f(4)=4+f(3)=4+5=9

结束

相似回答