递归 - 汉诺塔
题目
有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数。
思路
递归操作,每次操作把盘子数量-1,每递归一次中介点都要变化。
代码
/* 递归:汉诺塔
2021/1/3 @xycg0529
*/
#include <iostream>
using namespace std;
void hanoi(int n, char src, char mid, char dest){
if(n == 1){
cout << src << "->" << dest << endl;
return;
}
hanoi(n-1, src, dest, mid);
cout << src << "->" << dest << endl;
hanoi(n-1, mid, src, dest);
return;
}
int main()
{
int n;
cin >> n;
hanoi(n, 'A', 'B', 'C');
return 0;
}