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如何调用C/C++底层库与互相传值
Aug 10 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
Python实现的矩阵类实例
Aug 22 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
Python语言实现将图片转化为html页面
Dec 06 Python
python简易远程控制单线程版
Jun 20 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
php 字符串压缩方法比较示例
2014/01/23 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
分析javascript原型及原型链
2018/03/18 Javascript
vue实现文件上传功能
2018/08/13 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
python中os模块详解
2016/10/14 Python
对Python 内建函数和保留字详解
2018/10/15 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
西式婚礼证婚词
2014/01/12 职场文书
怎么写自荐书范文
2014/02/12 职场文书
中学生运动会入场词
2014/02/12 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
爱心捐款感谢信
2015/01/20 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python