使用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 相关文章推荐
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
详解python之协程gevent模块
Jun 14 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
pytorch自定义初始化权重的方法
Aug 17 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
Python动态导入模块和反射机制详解
Feb 18 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
Django mysqlclient安装和使用详解
Sep 17 Python
pymysql模块使用简介与示例
Nov 17 Python
让文件路径提取变得更简单的Python Path库
May 27 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实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
js tab效果的实现代码
2009/12/26 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
python中尾递归用法实例详解
2015/04/28 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
django迁移文件migrations的实现
2020/03/31 Python
keras输出预测值和真实值方式
2020/06/27 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
智能电子应届生求职信
2013/11/10 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python
Java 多态分析
2022/04/26 Java/Android
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript