C++ 这个递归是如何到达cout语句的?

C++ 这个递归是如何到达cout语句的?,c++,recursion,towers-of-hanoi,C++,Recursion,Towers Of Hanoi,我有这个函数来解决河内塔的问题,幸运的是,它工作得很好,但是有人能向我解释一下,在案例m中,函数在cout语句之前是否调用了self=0那么它是如何到达cout语句的,甚至是它自身的另一个调用的呢 #include <iostream> using namespace std; void Hanoi(int m, char a, char b, char c){ if(m == 1){ cout << "Move disc " << m <&

我有这个函数来解决河内塔的问题,幸运的是,它工作得很好,但是有人能向我解释一下,在案例m中,函数在cout语句之前是否调用了self=0那么它是如何到达cout语句的,甚至是它自身的另一个调用的呢

#include <iostream>

using namespace std;

void Hanoi(int m, char a, char b, char c){
if(m == 1){
    cout << "Move disc " << m << " from " << a << " to " << c << endl;
 }else{  
      Hanoi(m-1, a,c,b);
      cout << "Move disc " << m << " from " << a << " to " << c << endl;
      Hanoi(m-1,b,a,c);
  }
}

int main(){

int discs;
cout << "Enter the number of discs: " << endl;
cin >> discs;
Hanoi(discs, 'A', 'B', 'C');


 return 0;
}
调用Hanoim,其中m>1:首先执行Hanoim-1和所有结果调用。然后它执行cout。然后它再次执行Hanoim-1和所有结果调用

考虑m==3:


时间到了。特别是要学习如何使用调试器逐行调试代码,并逐步执行函数调用。@Someprogrammerdude我很欣赏第二句话。很好地补充了博客。适当的缩进会使代码更容易阅读。这就是递归的奥秘。从一个简单的递归问题开始,比如递归计算一个数的阶乘。阶乘可以这样递归定义:n!=n*n-1!还有n!=1.递归函数的工作原理与非递归函数完全相同。你调用它,当它返回时,你继续你原来的位置。它的工作方式与main继续返回0时完全相同;在对河内的呼叫返回后。你的意思是m>1,不是严格的不等式,不是弱的吗?当m为1时,它不执行Hanoim-1,或者我遗漏了什么?也许把m==1作为一个单独的例子来调用会有用吗?
Hanoi(3)
    Hanoi(2)
        Hanoi(1)
            cout
        cout
        Hanoi(1)
            cout
    cout
    Hanoi(2)
        Hanoi(1)
            cout
        cout
        Hanoi(1)
            cout