理解这个递归 C 程序以反向打印字符串所需的解释
Explanation needed to understand this recursive C program to print a string in reverse
我不明白何时执行 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);
}
每次你在 fun_reverse
函数中调用 fun_reverse
时,它不会立即打印输入的字符,只是要求输入另一个字符,堆积请求(并创建尽可能多的局部变量存储每个字符)直到达到 EOF
。
当遇到EOF
时,fun_reverse
returns不再调用fun_reverse
,结束链,使所有调用者return并最终打印结果。
调用由于递归而堆积起来的事实具有反转输出的效果,因为反堆积它们是通过相反的方式完成的。
这种技术通常用于在没有任何额外缓冲区的情况下将数字转换为字符串。将数字转换为字符串首先给出数字的 "wrong" 结尾,因此您必须缓冲数字,直到数字数字被完全处理。与上述算法类似的算法允许存储数字并以可读顺序打印它们。
虽然您的问题已经得到解答,但我建议您阅读“head recursion”和“tail recursion”。
查看 this question 的已接受答案。
我不明白何时执行 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);
}
每次你在 fun_reverse
函数中调用 fun_reverse
时,它不会立即打印输入的字符,只是要求输入另一个字符,堆积请求(并创建尽可能多的局部变量存储每个字符)直到达到 EOF
。
当遇到EOF
时,fun_reverse
returns不再调用fun_reverse
,结束链,使所有调用者return并最终打印结果。
调用由于递归而堆积起来的事实具有反转输出的效果,因为反堆积它们是通过相反的方式完成的。
这种技术通常用于在没有任何额外缓冲区的情况下将数字转换为字符串。将数字转换为字符串首先给出数字的 "wrong" 结尾,因此您必须缓冲数字,直到数字数字被完全处理。与上述算法类似的算法允许存储数字并以可读顺序打印它们。
虽然您的问题已经得到解答,但我建议您阅读“head recursion”和“tail recursion”。 查看 this question 的已接受答案。