使用遞歸解決漢諾塔問題

 

#   漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。
#   大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。
#   大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。
#   規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
 
def hanoi(n,x,y,z):
    global i
    if n == 1:
        print(x,"→",z) # 假如只有一個盤子,直接從X移動到Z上
        i += 1        
    else:
        i += 1
        hanoi(n-1,x,z,y)       # 將X上的n-1個盤子藉助Z移動到Y上(63個盤子移開後X騰空)

        print(x,"→",z)        # 將最底下的盤子移動到Z上(第64個盤子)

        hanoi(n-1,y,x,z)       # 將Y上的n-1個盤子藉助X移動到Z上(62個盤子移到X上,得到第63個盤子)

global i                       #定義一個全局變量統計執行步驟
i = 0
n = int(input("請輸入漢諾塔的層數:"))
hanoi(n,'X','Y','Z')
print ("至少需要執行步驟數:",i)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章