Python递归实现汉诺塔算法示例


Posted in Python onMarch 19, 2018

本文实例讲述了Python递归实现汉诺塔算法。分享给大家供大家参考,具体如下:

最近面试题,面试官让我5分钟实现汉诺塔算法(已然忘记汉诺塔是啥)。

痛定思痛,回来查了一下汉诺塔的题目和算法。题干与实现如下:

A基座有64个盘子,大在下小在上,每次移动一个盘子,每次都需要大在下小在上,全部移动到B基座,C基座为辅助基座。

# -*- coding:utf-8 -*-
# 汉诺塔回溯递归实现
# 假设参数中初始杆为a,借助杆为c,阶段终止杆为b
# 第一步,a状态借助b移动到c
# 第二步,a移动到b
# 第三步,c借助a移动到b
class Solution:
  def hanoi(self, n, a, b, c):
    global lishan
    if n > 0:
      Solution.hanoi(self, n-1, a, c, b)
      b.append(lishan[n-1])
      a.remove(lishan[n-1])
      Solution.hanoi(self, n-1, c, b, a)
so = Solution()
n = 3
global lishan
lishan = [x for x in xrange(n)]
A = [x for x in xrange(n)]
B = []
C = []
so.hanoi(3, A, B, C)print B

运行结果:

[2, 1, 0]

回溯递归,设计起来还是很有难度的(在没有背过这个题目的前提下)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
运行django项目指定IP和端口的方法
May 14 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
对Python实现累加函数的方法详解
Jan 23 Python
利用python求积分的实例
Jul 03 Python
python文档字符串(函数使用说明)使用详解
Jul 30 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
Python与C++中梯度方向直方图的实现
Mar 17 Python
Python实现替换文件中指定内容的方法
Mar 19 #Python
python书籍信息爬虫实例
Mar 19 #Python
python中字符串比较使用is、==和cmp()总结
Mar 18 #Python
Python使用zip合并相邻列表项的方法示例
Mar 17 #Python
Python zip()函数用法实例分析
Mar 17 #Python
Python iter()函数用法实例分析
Mar 17 #Python
Python callable()函数用法实例分析
Mar 17 #Python
You might like
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
js实现导航跟随效果
2018/11/17 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
简单介绍Python中的几种数据类型
2016/01/02 Python
Python单链表简单实现代码
2016/04/27 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
儿童编程python入门
2018/05/08 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
django model通过字典更新数据实例
2020/04/01 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
python如何编写win程序
2020/06/08 Python
深入理解Python 多线程
2020/06/16 Python
Python 如何测试文件是否存在
2020/07/31 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
计算机应用专业推荐信
2013/11/13 职场文书
收款委托书范本
2014/09/11 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
2015年采购部工作总结
2015/04/23 职场文书
音乐会主持人开场白
2015/05/28 职场文书