有三根相鄰的柱子,標號爲A,B,C,A柱子上從下到上按金字塔狀疊放着n個不同大小的圓盤,要把所有盤子一個一個移動到柱子B上,並且每次移動同一根柱子上都不能出現大盤子在小盤子上方,請問至少需要多少次移動,設移動次數爲H(n)。
#include<iostream>
using namespace std;
//例如有N和盤子在A柱子上,要移到C上,B是中轉站作用。
//分解簡化一下問題,
//① 我需要把N-1個盤子先移到B上,
//② 再把剩下的1個盤子從A移動到C,直接輸出即可
//③ 然後把B上的N-1歌盤子移動到C,
//就完成了
//然後用這個思想寫出遞歸
//如下
//漢諾卡問題
void Hanoi(int n,char a,char b,char c)//A到C,B做中轉
{
if (n==1)//若就一個盤子,就直接A到C,沒毛病吧,老鐵?
{
cout << a << "--->" << c << endl;//輸出步驟
return;
}
Hanoi(n-1,a,c,b);//① //A到B,C做中轉
cout << a << "--->" << c << endl;//②
Hanoi(n-1,b,a,c);//③ //B到C,A做中轉
return;
}
int main()
{
int n;
cin >> n;
Hanoi(n,'A','B','C');
return 0;
}