需要了解此递归C程序以反向打印字符串的说明

时间:2018-10-01 08:00:57

标签: 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();
    putchar(ch);
}

2 个答案:

答案 0 :(得分:3)

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

遇到EOF时,fun_reverse返回而没有再次调用fun_reverse,结束链,使所有调用者返回并最终打印结果。

由于递归导致调用被堆积的事实具有反转输出的效果,因为反汇编它们是相反的。

此技术通常用于将数字转换为字符串而没有任何额外的缓冲区。将数字转换为字符串会首先给出数字的“错误”结尾,因此您必须缓冲数字,直到完全处理完数字为止。与上面类似的算法可以存储数字并以可读的顺序打印它们。

答案 1 :(得分:0)

尽管您的问题已经得到回答,但我还是建议您阅读有关“ 头部递归”和“ 尾部递归”的内容。 查看this question的可接受答案。