2:15:24还在学习!难怪问这么。。。MY GOD!
当你递归遇阻时,请首先降低递归深度!
put(char *ch)
{ if(*ch=='\0')return;
put(ch+1);
printf("%c",*ch);
}
main()
{ char CH[]="ab";//俺先处理2个有效字符,看看行不行
put(CH);//将CH[0]的地址传送给put()的形参ch
printf("\n");
}
下面是执行情况:
1。if()条件不满足,因为此时(*ch)=='a'
2。二度调用put(ch+1),将CH[1]的地址传送给put()的形参ch
3。if()条件不满足,因为此时(*ch)=='b'
4。三度调用put(ch+1),将CH[2]的地址传送给put()的形参ch
5。if()条件成立,因为此时(*ch)==CH[2]=='\0'
6。于是“return”
返回到哪里?这是初学者最迷惑不解的!
7。
返回到(因三度调用导致的)二度调用断点处。因而执行:
printf("%c",*ch);注意:输出一个'b'而不是'a'
8。现在遇见隐含的“return”
返回到哪里?又是初学者困惑的!
9。
返回到(因二度调用导致的)初次调用断点处。因而执行:
printf("%c",*ch);注意:此时输出'a'
10.又遇见隐含的“return”
返回到哪里?又犯难了不是?
11.
返回到(因初次调用导致的)main()断点处。因而执行:
printf("\n");
12.此时遇见main()末尾隐含的“return”
返回到哪里?
13.返回到当初启动main()运作的那个家伙手里。
注意递归深度、关注返回哪里。
既要低头拉车、也得抬头问路。