關於漢諾塔問題

2021-07-10 23:55:38 字數 1245 閱讀 5317

c++課程講到遞迴演算法時,偶遇漢諾塔問題。由於之前在做一些小作品程式設計時看別人的**案例發現看不懂,覺得程式設計關鍵還是思路問題啦啦啦~解決思路是第乙個瓶頸,於是在這裡還是小白的我希望能把我的思維過程展現出來以便以後要思考漢諾塔問題的小小白~

首先,我們必須自學遞迴的基礎,遞迴通俗的來說就是自己呼叫自己,比如以下形式

void f(int n)

f(n-1);

但是乙個有窮的遞迴必須加上乙個終止條件,即遞迴到了源頭

如void f(int n)

if (n == 1)

f(n-1);

下面是我對漢諾塔問題的一些思考過程

我首先是把簡單的情況列舉了以下,比如乙個、兩個、三個、四個、五個盤的情況,試圖抽象出乙個統一的規律(為此在實現遞迴的形式之前我先寫出函式呼叫函式,遞迴的實質也是函式的呼叫嘛)

接著發現雖然字母不同,但是實質上三個盤的關係無非是起點、過渡、目標的關係,於是把字母統一。同時,除了n==1只有一步外,其他都有三步,高層函式的實現呼叫底層的函式,從中發現規律。

第四關:抽象出乙個遞迴形式模型,難點就是觸及最底層(即遞迴到源頭的時候怎麼內嵌進去整個遞迴函式)當然這也並不難,試驗一下就能實現

下面便是解決if n==2的嵌入問題以及把偽**寫成**雛形

然後就是眼除bug和測試執行了。

最後是程式和結果

這是小白認真思考這個問題後的一些心得體會~如果有錯誤還希望有大神指出~~~~~~~~~~~~~萬分感謝~

關於漢諾塔問題二

根據以上的分析,不難寫出程式 void move char chsour,char chdest hanoi int n,char cha,char chb,char chc main 第二種 不使用遞迴方法。include using namespace std const int max 64 ...

漢諾塔問題

問題 假設有3個分別命名為x,y,z的寶塔,在塔座x上插有n個直徑大小各不相同,從小到大編號為1,2,3。n的圓盤。現要求將x軸上的n個圓盤移至塔座z上 並仍然按同樣的順序疊排,圓盤移動時必須遵循下列規則 1.每次只能移動乙個圓盤 2.圓盤可以插在x,y和z中的任一塔座上 3.任何時刻都不能將乙個較...

漢諾塔問題

問題是 印度的乙個古老的傳說。開天闢地的神勃拉瑪在乙個廟裡留下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的乙個在底下,其餘乙個比乙個小,依次疊上去,廟裡的眾僧不倦地把它們乙個個地從這根棒搬到另一根棒上,規定可利用中間的一根棒作為幫助,但每次只能搬乙個,而且大的不能放在小的上面。解答結果請自...