我有这个函数来解决河内塔问题,幸运的是它运行良好,但任何人都可以向我解释该函数是否在 cout 语句之前调用它 self 在 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;
}
调用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