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多进程操作实例
Nov 21 Python
python从sqlite读取并显示数据的方法
May 08 Python
win10系统中安装scrapy-1.1
Jul 03 Python
python实现简单爬虫功能的示例
Oct 24 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
python频繁写入文件时提速的方法
Jun 26 Python
用Python配平化学方程式的方法
Jul 20 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
Python绘制股票移动均线的实例
Aug 24 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 MsSql server时遇到的中文编码问题
2009/06/11 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
Python Tkinter基础控件用法
2014/09/03 Python
Python语法快速入门指南
2015/10/12 Python
Python笔记之facade模式
2019/11/20 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
培训自我鉴定
2014/01/31 职场文书
企业文化标语口号
2014/06/09 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
政风行风评议心得体会
2014/10/21 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
二手房购房意向书
2015/05/09 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android
nginx请求限制配置方法
2021/07/09 Servers
java项目构建Gradle的使用教程
2022/03/24 Java/Android