我不明白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);
}
答案 0 :(得分:3)
每次在fun_reverse
函数中调用fun_reverse
时,它不会立即打印输入的字符,只是要求输入另一个字符,然后堆积在请求上(并创建尽可能多的存储每个字符的局部变量),直到达到EOF
。
遇到EOF
时,fun_reverse
返回而没有再次调用fun_reverse
,结束链,使所有调用者返回并最终打印结果。
由于递归导致调用被堆积的事实具有反转输出的效果,因为反汇编它们是相反的。
此技术通常用于将数字转换为字符串而没有任何额外的缓冲区。将数字转换为字符串会首先给出数字的“错误”结尾,因此您必须缓冲数字,直到完全处理完数字为止。与上面类似的算法可以存储数字并以可读的顺序打印它们。
答案 1 :(得分:0)
尽管您的问题已经得到回答,但我还是建议您阅读有关“ 头部递归”和“ 尾部递归”的内容。 查看this question的可接受答案。