C 中漢諾塔問題的遞迴解法

2022-01-18 12:06:32 字數 1006 閱讀 9815

漢諾塔就是將一摞盤子從乙個塔轉移到另乙個塔的遊戲,中間有乙個用來過度盤子的輔助塔。

遊戲試玩在此。

用遞迴的思想解決漢諾塔問題就是分為兩種情況:

第一種情況是只有乙個盤子的情況,也就是最基本的情況,這種情況下,直接將該盤子從原始塔轉移到目標塔即可勝利;

第二種情況是右n個盤子的情況,也就是普遍情況,這種情況下,要將除了最底下的那個盤子以外的(n-1)個盤子從原始塔轉移到輔助塔,再把最底下的那個盤子(第n個盤子)從原始塔轉移到目標塔,最後將輔助塔的(n-1)個盤子從輔助塔轉移到目標塔。

而第二種情況中(n-1)個盤子的問題又可以拆分成(n-2)個盤子和乙個盤子的問題——

而(n-2)個盤子的問題又可以拆分成(n-3個情況)和乙個盤子的問題——

最終可以拆分成(n-(n-1))個盤子的問題,也就是乙個盤子的問題,這時候問題就變成了第一種情況——

將這個盤子從原始塔轉移到目標塔即可。

以上就是遞迴的思想在解漢諾塔遊戲中的應用,我們可以理解這種遞迴法為類似數學歸納法的逆向思維法:

數學歸納法是一種從問題最基本情況的求解過程通過找規律從而得出該問題普遍情況的求解過程的方法;

遞迴法是將對問題普遍情況的求解過程進行拆分,最後分解為對一種最基本情況的求解過程的方法。

通過遞迴法解決漢諾塔的移動順序問題**如下:

漢諾塔問題的遞迴解法

漢諾塔問題的遞迴解法 實現程式 include using namespace std void move int n,char i,char j void hanoi int n,char x,char y,char z int main 執行結果 以下是3層漢諾塔的解法 把1號從x移動到z 把2...

漢諾塔遞迴解法

解題思路 1 當只有乙個圓盤時,只需將其從 塔a移至目標塔c 不需要借助輔助塔b 2 當有兩個圓盤時,需要先把1號圓盤移至輔助塔b,將2號圓盤移至目標塔c,再將輔助塔b上的1號圓盤移至目標塔c即可。3 當有三個圓盤時,需要先把1號 2號圓盤移至輔助塔b,將3號圓盤移至目標塔c,再將輔助塔b上的1號 ...

漢諾塔的遞迴解法

遇到這題,就覺得我的理解能力和表達能力不行,用了好長時間把這題弄懂,然而又不知道怎麼用語言表述。要先找到 n 1的是基例,當只有一塊時,直接從a移動到c就完成了 然後再解決n的問題,都可以看成 先把 a柱 n 1 個盤子,先從a 移動到b,再將a最後乙個盤子從a 移動到c,最後將n 1個盤子從b移動...