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中关于字符串对象的一些基础知识
Apr 08 Python
Python多进程同步简单实现代码
Apr 27 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
基于python生成英文版词云图代码实例
May 16 Python
Python flask路由间传递变量实例详解
Jun 03 Python
python 遍历磁盘目录的三种方法
Apr 02 Python
使用Django框架创建项目
Jun 10 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
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
javascript 简练的几个函数
2009/08/29 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
js继承的实现代码
2010/08/05 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
python 实现return返回多个值
2019/11/19 Python
python线程池如何使用
2020/05/28 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
希特勒经典演讲稿
2014/05/19 职场文书
通信工程求职信
2014/07/16 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
护士求职自荐信范文
2015/03/04 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
MySQL触发器的使用
2021/05/24 MySQL
php解析非标准json、非规范json的方式实例
2022/05/10 PHP