漢諾塔含義:
漢諾塔:漢諾塔(又稱河內塔)問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著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