使用python實現遞迴版漢諾塔樣本(漢諾塔遞迴演算法)

來源:互聯網
上載者:User
利用python實現的漢諾塔。帶有圖形示範

複製代碼 代碼如下:


from time import sleep

def disp_sym(num, sym):
print(sym*num, end='')

#recusion
def hanoi(a, b, c, n, tray_num):
if n == 1:
move_tray(a, c)
disp(tray_num)
sleep(0.7)

else:
hanoi(a, c, b, n-1, tray_num)
move_tray(a, c)
disp(tray_num)
sleep(0.7)
hanoi(b, a, c, n-1, tray_num)

def move_tray(a, b):
for i in a:
if i != 0:
for j in b:
if j != 0:
b[b.index(j) - 1] = i
a[a.index(i)] = 0
return
b.append(i)
b.pop(0)
a[a.index(i)] = 0
return

def disp(tray_num):
global a, b, c
for i in range(tray_num):
for j in ['a', 'b', 'c']:
disp_sym(5, ' ')
eval('disp_sym(tray_num - ' + j + "[i], ' ')")
eval('disp_sym(' + j + "[i], '=')")
disp_sym(1, '|')
eval('disp_sym(' + j + "[i], '=')")
eval('disp_sym(tray_num - ' + j + "[i], ' ')")

print()

print('---------------------------------------------------------------------------')

tray_num=int(input("Please input the number of trays:"))
tray=[]
for i in range(tray_num):
tray.append(i + 1)
a=[0]*tray_num
b=a[:]
c=a[:]

a = tray[:]
disp(tray_num)
hanoi(a, b, c, tray_num, tray_num)

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.