解释需要理解这个递归的C程序来反向打印字符串

解释需要理解这个递归的C程序来反向打印字符串,c,return,getchar,putchar,C,Return,Getchar,Putchar,我无法理解何时执行putchar行以及它如何帮助反转输入行?如果发生EOF,则执行return语句,但该行之后会发生什么 #include<stdio.h> int fun_reverse(); void main(){ fun_reverse(); } int fun_reverse(){ int ch ; ch = getchar(); if(ch==EOF) return; fun_reverse(); p

我无法理解何时执行putchar行以及它如何帮助反转输入行?如果发生EOF,则执行
return
语句,但该行之后会发生什么

#include<stdio.h>
int fun_reverse();
void main(){

    fun_reverse();
}

int fun_reverse(){

    int ch ;
    ch = getchar();
    if(ch==EOF)
        return;

    fun_reverse();
    putchar(ch);
}
#包括
int fun_reverse();
void main(){
fun_reverse();
}
int fun_reverse(){
int-ch;
ch=getchar();
如果(ch==EOF)
返回;
fun_reverse();
putchar(ch);
}

每次您在
fun\u reverse
函数中调用
fun\u reverse
时,它不会立即打印输入的字符,只会请求输入另一个字符,在请求上堆积(并创建存储每个字符的尽可能多的局部变量),直到达到
EOF

当遇到
EOF
时,
fun\u reverse
返回而不再次调用
fun\u reverse
,结束链,使所有调用方返回并最终打印结果

调用由于递归而堆积的事实具有反转输出的效果,因为取消它们的归档是以相反的方式完成的


此技术通常用于将数字转换为字符串,而无需任何额外的缓冲区。将数字转换为字符串会首先给出数字的“错误”结尾,因此必须对数字进行缓冲,直到完全处理完数字。与上述算法类似的算法允许存储数字并按可读顺序打印。

虽然您的问题已经得到了回答,但我建议您阅读有关“头部递归”和“尾部递归”的内容。
看一看被接受的答案

递归将结果存储到最后,然后以相反的顺序输出。我建议您使用调试器逐行逐行遍历代码,并逐步执行递归调用。希望这对理解这段代码会有很大帮助。“这项技术通常用于将数字转换为字符串,而无需任何额外的缓冲区。”无需任何显式声明的缓冲区。:-)是::)缓冲区是自动内存。不要用10位数的数字来尝试。。如果存在的话。我现在明白了。非常感谢您的回复。