首先这个代码有问题,void palin(n)应为void palin(int n)后面的int n;不要了,否则不能编译通过。
分析流程很简单:
假定输入34567
首先n=5;next=getchar()=3;
palin(n-1=4);next=getchar()=4(注意关键的地方,这个next和上一个next是不一样的,上一个next被压栈保护;)
……
palin(1);next=getchar()=7;(压栈完成,下面进行出栈)
putchar(next=7);7被pop出来;
……
弄清楚递归,一定要搞明白栈(first in last out)的结构,递归就是依赖栈运行的。在运行下一个递归函数前将上一个递归函数压栈,这个递归函数运行完成后,继续运行上一个递归函数;
这个递归如果拆开来写如下:
1. getchar() 输入3
2. getchar()输入4(上一个getchar()及得到的3被压栈)
3. getchar()……5
4. getchar()……6
5. getchar()……7
5. putchar() 输出7
4. putchar() 输出6
3. putchar() ………5
2. putchar()……4
1. putchar()……3
按照1234554321的次序,标号相同的语句是同一个函数的语句,正所谓first in last out 首先被执行getchar的最后被执行putchar
温馨提示:答案为网友推荐,仅供参考