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


Posted in Python onApril 08, 2014

利用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 相关文章推荐
在Python中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
python logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
python 发送get请求接口详解
Nov 17 Python
python中mongodb包操作数据库
Apr 19 Python
python运行脚本文件的三种方法实例
Jun 25 Python
python计算圆周长、面积、球体体积并画出圆
Apr 08 #Python
python实现类似ftp传输文件的网络程序示例
Apr 08 #Python
Python collections模块实例讲解
Apr 07 #Python
python操作xml文件示例
Apr 07 #Python
python生成随机验证码(中文验证码)示例
Apr 03 #Python
python读取html中指定元素生成excle文件示例
Apr 03 #Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 #Python
You might like
PHP URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
django celery redis使用具体实践
2019/04/08 Python
为什么使用接口?
2014/08/13 面试题
中文系师范生自荐信
2013/10/01 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
python简单验证码识别的实现过程
2021/06/20 Python