解释需要理解这个递归的C程序来反向打印字符串
我无法理解何时执行putchar行以及它如何帮助反转输入行?如果发生EOF,则执行解释需要理解这个递归的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
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位数的数字来尝试。。如果存在的话。我现在明白了。非常感谢您的回复。