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 相关文章推荐
python使用pil生成缩略图的方法
Mar 26 Python
python爬虫_自动获取seebug的poc实例
Aug 05 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
python实现数据库跨服务器迁移
Apr 12 Python
python实现txt文件格式转换为arff格式
May 31 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
python中tab键是什么意思
Jun 18 Python
python exit出错原因整理
Aug 31 Python
详解Python中openpyxl模块基本用法
Feb 23 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
php设计模式之委托模式
2016/02/13 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
学习python类方法与对象方法
2016/03/15 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
详解python的ORM中Pony用法
2018/02/09 Python
Django中的Model操作表的实现
2018/07/24 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python文件操作方法详解
2020/02/09 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
带薪年假请假条
2014/02/04 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
村干部任职承诺书
2015/01/21 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
整脏治乱工作简报
2015/07/21 职场文书