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

作者&投稿:俞戚 (若有异议请与网页底部的电邮联系)
有没有人能帮我讲解一下这个C语言程序的执行过程?~

#include"stdio.h"
main()
{ char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)//这里只有i++,j++在下面,j不随for循环自加1
if (s[i]!='c')
s[j++]=s[i];//每有一个不为'c'的单位出现,j自加1;并且该单位的值,重新赋值给数组s,从s[0]开始,因为j初值为0
else//这加个else便于理解,等价于源代码;该单位的值为'c',就向该单位赋予空值;
s[j]='\0';
puts(s);
}//例如输入abcdec,分别占据s[0]='a',s[1]='b',s[2]='c',s[3]='d',s[4]='e',s[5]='c';
//s[0](j==0),s[1](j==1)还是赋值在原位,
//s[2](这if不成立,j不自加1)s[2]='\0',
//s[3]不为'c'(j==2),所以'd'就赋给了s[2];
//s[4](j==3),'e'赋予s[3],
//s[5]='\0',赋空值;

一共执行21次,分别是20~0,即0+1+2...+20之和.

这段代码的执行过程

主函数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);

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

 return(s);

}

main(){

 long x;

 x=fun5(4);

 printf("%ld",x);

}



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给出最后结果。
这就是递归。

你这个应该有个退出的机制,如果没有,那,一直加下去了,可以递归一次后。判断s的值是否符合某个条件,比如大于几小于几,然后再返回?

递归路线图:

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

结束



对于C语言的递归还是懵懵懂懂,能帮我分析一下这段代码的执行流程吗...
答:这段代码的执行过程 主函数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--...