遞迴:漢諾塔問題
阿新 • • 發佈:2018-11-28
1.題目
2.思路
1、把A上面n-1個盤子移動到B上。
2、把A上最後一個移動到C;
3、把B上n-1個移動到A上,再把B上最後一個移動到C;
如此迴圈2,3,步驟,直到把最後一個盤子移動到C上
3.程式碼
/* * @Author: yajie * @Date: 2018-05-15 21:05:20 * @Last Modified by: yajie * @Last Modified time: 2018-05-15 21:23:52 */ #include <iostream> using namespace std; //將 src坐上噸n個盤子,以 mid坐為中轉,移動到dest 坐 void Hanoi(int n, char src, char mid, char dest) { if(n == 1){ //1.1直接 從 src 移動至dest cout << src << "->" << dest << endl; return; } //1.2否則,先將上面 n-1 個盤子,以dest 坐為中轉,移動到mid 坐 Hanoi(n-1,src,dest,mid); //1.3 再將 剩下那個 從src 移動到 dest cout << src << "->" << dest << endl; //1.4 最後將 n-1 個盤子,從mid 移動到 dest Hanoi(n-1,mid,src,dest); return; } int main() { int n;//輸入盤子的個數 cin >> n; Hanoi(n,'A','B','C'); return 0; }