C++ 递归堆栈

标签 c++ recursion

我对递归在此示例中的工作方式感到困惑。如果输入 'ABC\n',则输出 CBA。如果有人可以逐步完成该过程,我将不胜感激。

  1. 在main()中调用了ReverseLine()
  2. 本地自动 myInput 接收 'ABC\n'

  3. 然后它检查 myInput 中的 '\n' 和 EOF,这是我开始感到困惑的地方

我认为它说的是,A != '\n' 和 A != EOF 所以 ReverseLine() 被再次调用,但是然后呢???

递归是如何进行的,我只想了解一下过程

谢谢

    using namespace std;

    void ReverseLine(){
       int myInput;

       myInput = cin.get();

       if (myInput != '\n' && myInput != EOF)
        ReverseLine();

       if (myInput != EOF)
        cout.put(myInput);
    }

    int main(){

       ReverseLine();
       return 0;

    }

最佳答案

当您调用 ReverseLine 时,它​​会读取一个字符。如果该字符不是换行符或 EOF,它会再次调用自己(递归)读取下一个字符,直到遇到换行符,此时它打印它刚刚读取的字符,然后返回到 ReverseLine 打印它读取的字符并依此类推,直到它返回到对 ReverseLine 的初始调用,打印读取的第一个字符,然后退出。

关于C++ 递归堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12762702/

相关文章:

c++ - 使用 STL 在 list<MyStruct> 中查找成员的最小值

c++ - Rcpp 移动平均 - 边界错误导致 fatal error

c++ - libx264.dll 公开函数 x264_encoder_open_130,这不应该是 x264_encoder_open 吗?

java - Java递归中返回值的用法

带有引导验证的 form.each 函数上的 jquery 递归错误太多

recursion - 您将如何在 Prolog 中编写程序以使用递归打印从 1 到 10 的数字?

c++ - 如何在 Visual Studio 2010 中自动折叠某些注释?

c++ - 在父类型声明中使用子类型

javascript - javascript递归骰子组合并将结果存储在矩阵中

java - 这个递归是如何工作的以及如何让它打印出根?