在漢諾塔遊戲中,有三個分別命名爲A、B、C得塔座,幾個大小各不相同,從小到大一次編號得圓盤,每一個原盤中間有一個小孔。最初,全部得圓盤都在A塔座上,其中最大得圓盤在最下面,而後是第二大,以此類推.python
遊戲的目的是將全部的圓盤從塔座A移動到塔座B;塔座C用來防止臨時圓盤,遊戲的規則以下:3d
一、一次只能移動一個圓盤。blog
二、任什麼時候候都不能將一個較大的圓盤壓在較小的圓盤上面。遊戲
三、除了第二條限制,任何塔座的最上面的圓盤均可以移動到其餘塔座上。utf-8
漢諾塔問題解決思想:class
在解決漢諾塔問題時,事實上,咱們不是罪關心圓盤1開始應該挪到哪一個塔座上,而是關心最下面的圓盤4。固然,咱們不能直接移動圓盤4,可是圓盤4最終將從塔座A移動到塔座B。按照遊戲規則,在移動圓盤4以前的狀況必定以下圖方法
咱們仍將分析,如何將前三個圓盤從A移動到C,而後圓盤4從A移動到B,前三個圓盤從C再移動到B。im
可是上面的步驟能夠重複利用!例如將三個圓盤從A移動到C,那麼應該先將前兩個圓盤從A移動到B,而後將圓盤3從A移動到C,最後將前兩個圓盤從B移動到C。命名
持續簡化這個問題,最終咱們將只須要處理一個圓盤從一個塔座移動到另外一個塔座的問題。img
總而言之,就是將一座塔移動到另外一座塔上,且移動的過程當中大的圓盤不能在小的圓盤上面。
#codiing = utf-8 def hanoi(n,a,b,c): #n = 圓盤數 ; a,b,c爲三棵柱子(即起點、緩衝區、終點) if n == 1: print(a, '-->', c) else: hanoi(n - 1, a, c, b) print(a, '-->', c) hanoi(n - 1, b, a, c) if __name__ == '__main__': hanoi(4,'A','B','C') #輸出把全部盤子從A藉助B移動到C的方法