C语言中递归调用问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 07:11:10
#include<stdio.h>
void fun(int n)
{
int next;
if(n<=1)
{
next=getchar();
printf("aaaaa|n");
putchar(next);
}

else
{
next=getchar();
printf("bbbbb|n");
fun(n-1);
putchar(next);
}
}
void main()
{
int n=5;
fun(n);
getch();
}

想问程序中的putchar(next)是怎么执行的:
为什么在屏幕上输入:ghjkl
会输出:bbbbb
bbbbb
bbbbb
bbbbb
aaaaa
lkjhg
主要想问:最后一行的输出结果是怎么回事,为什么不是输出:ll;而是:lkjhg

你只知道递推,却不知道回归
你输入了ghjkl 这个,由于你用的是
getchar,所以每次只能读入一个字符
至于其他的都暂时停留在缓冲区
每次递归调用,都会读入那些你输入的
还停留在缓冲区的字符,因为你要知道
在递推的过程中,只会打印bbbbb类似的字符串
不会打印你输入的字符串,因此,他总在读
但是却没输出,然后一直递归调用.到递归调用
到最后一次,即递归出口的时候,其实就是f(1)
这次读入的是你输入的最后的一个字符l
由于是出口,在这里也就将它进行了输出,即先输出l
之后由于知道了f(1)则回代给f(2),由于知道了f(2)
则也就执行它后面的语句putchar(next),将在这次递归调用
时读入的字符进行输出,其他同理

最后也就导致了逆向输出了,其实你只要知道输出你输入的字符
是在回代的过程中的就可以了,最先读入的是最后求得的,也就是说
f(5)是最后求得的,因此在调用f(5)时读入的字符g也将最后输出

好好仔细看看就明白了