Как эта рекурсия достигает Cout заявления? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть эта функция для решения проблемы Ханойской башни, и, к счастью, она работает хорошо, но кто-нибудь может мне объяснить, если функция вызывает ее самостоятельно перед оператором cout в случае m! = 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;
}

1 Ответ

0 голосов
/ 05 октября 2018

Вызов Hanoi(m), где m > 1: Сначала он выполняет Hanoi(m-1) и все последующие вызовы.Затем он выполняет cout.Затем он выполняет Hanoi(m-1) и все последующие вызовы во второй раз.

Рассмотрим m == 3:

Hanoi(3)
    Hanoi(2)
        Hanoi(1)
            cout
        cout
        Hanoi(1)
            cout
    cout
    Hanoi(2)
        Hanoi(1)
            cout
        cout
        Hanoi(1)
            cout
...