Python漢諾塔遞歸算法

漢諾塔含義:

漢諾塔:漢諾塔(又稱河內塔)問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

Hanoi玩具

算法思路:
1.當只有一個圓盤時,只需要從A柱子挪到C柱子即可,1次解決。
2.當有n個圓盤時,且小圓盤只能放在大圓盤上,全部挪到C柱子上,一定是把C柱子先作為中轉,n-1個圓盤全部挪到B柱子中,然后把A柱子中的最大圓盤挪到被清空的C柱子上,然后經歷和B柱子同樣的步數,把n-1個圓盤全部挪到C柱子上,按照大的在下小的在上的規則(此時把A柱子作為中轉)

代碼片段:

def move(n,a,b,c):
    if n == 1:
        print a,'-->',c
    else:
        move(n-1,a,c,b) #將n-1個圓盤最終挪到B柱子上
        move(1,a,b,c) #將A柱子上最大的圓盤挪到已被清空的C柱子上
        move(n-1,b,a,c) #將n-1個圓盤從B柱子上挪回C柱子上

move(3,'A','B','C')

運行結果:

運行結果.png

三個圓盤恰好需要7次挪移。

擴展思考:

n個圓盤需要挪移的次數是(n-1)個圓盤挪移次數乘以2再加上1,即表示為:f(n)=f(n-1)*2+1,這是一個遞推公式,可最終推導出通通項公式:f(n)=2^n-1

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前置文章:遞歸算法:www.lxweimin.com/p/703069f3ba3f . 漢諾塔問題是來源于印度傳...
    郎小凱閱讀 789評論 0 1
  • 原文鏈接(轉載請注明出處)漢諾塔的圖解遞歸算法 起源 漢諾塔(又稱河內塔)問題是源于印度一個古老傳說的益智玩具。大...
    Dmego閱讀 1,589評論 0 0
  • 不會哭了 作為代價 不會笑了, 也許我的存在, 只能在天堂隔壁, 靜靜地遠觀著, 曾是我唯一的夢。 當黎明不在光明...
    Mingmicro閱讀 275評論 0 0
  • 龜兔賽跑的故事大家都不陌生,我們從小聽到大,隨著不同的觀念故事也有不同的更新。 第一個故事是:兔子和烏龜...
    紅參勿忘閱讀 1,085評論 2 1
  • 沒有人會猜到我竟然會追人,也沒 有人會猜到我我竟然會追一個政法學院的。 故事只有開始沒有過程沒有結尾。故事只...
    TheCorner閱讀 487評論 0 2