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 相关文章推荐
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
python属于哪种语言
Aug 16 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 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 过滤器实现代码
2010/08/09 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP简单遍历对象示例
2016/09/28 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
use jscript List Installed Software
2007/06/11 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Django模板语言 Tags使用详解
2019/09/09 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
后勤人员自我鉴定
2013/10/20 职场文书
给女朋友的道歉信
2014/01/10 职场文书
农村葬礼主持词
2014/03/31 职场文书
反邪教警示教育方案
2014/05/13 职场文书
cf战队收人口号
2014/06/21 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
房屋出租委托书格式
2014/09/23 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
Python anaconda安装库命令详解
2021/10/16 Python
Vue深入理解插槽slot的使用
2022/08/05 Vue.js
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS