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实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
python 导入数据及作图的实现
Dec 03 Python
Tensorflow 模型转换 .pb convert to .lite实例
Feb 12 Python
Python安装与卸载流程详细步骤(图解)
Feb 20 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
基于pandas向csv添加新的行和列
May 25 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
Python函数中apply、map、applymap的区别
Nov 27 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(1)
2006/10/09 PHP
php 什么是PEAR?
2009/03/19 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
js实现常用排序算法
2016/08/09 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
python能开发游戏吗
2020/06/11 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
shell程序中如何注释
2012/02/17 面试题
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
恐龙的灭绝教学反思
2014/02/12 职场文书
项目合作意向书范本
2014/04/01 职场文书
产品质量保证书
2014/04/29 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
党委班子对照检查材料
2014/08/19 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers