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

yipeiwu_com5年前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, 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)

相关文章

Python中规范定义命名空间的一些建议

API的设计是一个艺术活。往往需要其简单、易懂、整洁、不累赘。 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的。 也就是说我们只需要暴露这个方法就行,不用关...

浅析Python多线程下的变量问题

在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。 但是局部变量也有问题,就...

python自动安装pip

如果是windows安装完成后,需要将'\Python27\Scripts\'加入系统环境变量复制代码 代码如下:# coding=utf-8import osimport urllib...

从零学Python之入门(五)缩进和选择

缩进 Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块。 先看C语言的表达方式(注意,这是C,不是...

python使用ddt过程中遇到的问题及解决方案【推荐】

python使用ddt过程中遇到的问题及解决方案【推荐】

前言: 在使用DDT数据驱动+HTMLTestRunner输出测试报告时遇到过2个问题: 1、生成的测试报告中,用例名称后有dict() -> new empty dictiona...