微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用python实现递归版汉诺塔示例(汉诺塔递归算法)

利用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,n-1,tray_num)
  move_tray(a,c)
  disp(tray_num)
  sleep(0.7)
  hanoi(b,a,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,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,tray_num,tray_num)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐