1. 程式人生 > >遞迴:漢諾塔問題

遞迴:漢諾塔問題

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;
}