溫馨提示×

如何用C++遞歸算法解決漢諾塔問題

c++
小樊
87
2024-09-27 10:40:12
欄目: 編程語言

漢諾塔問題是一個經(jīng)典的遞歸問題。假設有三個柱子A、B和C,在柱子A上有n個大小不一的圓盤,要求將這些圓盤從柱子A移動到柱子C,且每次只能移動一個圓盤,且在移動過程中不能將較大的圓盤放在較小的圓盤上。可以使用以下C++代碼實現(xiàn)遞歸算法解決漢諾塔問題:

#include <iostream>
using namespace std;

void hanoi(int n, char from, char to, char aux) {
    if (n == 1) {
        cout << "Move disk 1 from " << from << " to " << to << endl;
        return;
    }
    hanoi(n - 1, from, aux, to);
    cout << "Move disk "<< n << " from " << from << " to " << to << endl;
    hanoi(n - 1, aux, to, from);
}

int main() {
    int n;
    cout << "Enter the number of disks: ";
    cin >> n;
    hanoi(n, 'A', 'C', 'B');
    return 0;
}

在這個代碼中,我們定義了一個名為hanoi的函數(shù),它接受四個參數(shù):圓盤數(shù)量n,起始柱子from,目標柱子to和輔助柱子aux。當只有一個圓盤需要移動時,直接將其從起始柱子移動到目標柱子。否則,我們將前n-1個圓盤從起始柱子移動到輔助柱子上,然后將第n個圓盤從起始柱子移動到目標柱子上,最后將前n-1個圓盤從輔助柱子移動到目標柱子上。

main函數(shù)中,我們首先輸入圓盤的數(shù)量,然后調用hanoi函數(shù)解決問題。

0