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中的编码知识整理汇总
Jan 26 Python
python web框架学习笔记
May 03 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
Python利用operator模块实现对象的多级排序详解
May 09 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
Python适配器模式代码实现解析
Aug 02 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
Python绘制股票移动均线的实例
Aug 24 Python
python爬虫之遍历单个域名
Nov 20 Python
Python3监控疫情的完整代码
Feb 20 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 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 file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
python 实现A*算法的示例代码
2018/08/13 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
Python字典实现伪切片功能
2020/10/28 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
2014年小学元旦活动方案
2014/02/12 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
婚礼新人答谢词
2015/01/04 职场文书
2015双创工作总结
2015/07/24 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫