漢諾塔問題遞迴求解(python)
阿新 • • 發佈:2018-12-05
漢諾塔問題遞迴求解(python)
漢諾塔(Hanoi)問題
古代有一個梵塔,塔內有三個座x,y,z壇,x座上有64個盤子,盤子大小不等,大的在下,小的在上。有一個和尚想把這64個盤子從x座移到z座,但每次只能允許移動一個盤子,並且在移動過程中,3個座上的盤子始終保持大盤在下,小盤在上。在移動過程中可以藉助y座進行過渡。
解
def hanoi(n,x,y,z):
'遞迴從x把所有盤子藉助y移到z上'
global count
if n == 1: # 直接完成的狀態
print(x,'-->' ,z) # 表示移動
count += 1
else: # 需要分解,分析方法是先把三個步驟每一個都看成“大的完整的”一步,思想上不要再拆下去
hanoi(n-1,x,z,y) # 1、把上邊所有盤子從x藉助z移到y上
print(x,'-->',z) # 2、把最底層那一個盤子移到z上
count += 1
hanoi(n-1,y,x,z) # 3、把上邊所有盤子從y藉助x移到z上
while 1:
count = 0 # 步數記錄
n = int(input("請輸入漢諾塔層數:" ))
hanoi(n,'x','y','z')
print(count)