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 相关文章推荐
wxPython中listbox用法实例详解
Jun 01 Python
python连接字符串的方法小结
Jul 13 Python
详解python基础之while循环及if判断
Aug 24 Python
python导出chrome书签到markdown文件的实例代码
Dec 27 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
pandas 操作 Excel操作总结
Mar 31 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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
一个odbc连mssql分页的类
2006/10/09 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
web打印小结
2017/01/11 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
用实例解释Python中的继承和多态的概念
2015/04/27 Python
python数据结构之链表的实例讲解
2017/07/25 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Python代码需要缩进吗
2020/07/01 Python
python实现学生通讯录管理系统
2021/02/25 Python
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
卫校中专生的自我评价
2014/01/15 职场文书
水电工岗位职责
2014/02/12 职场文书
学校读书活动总结
2014/06/30 职场文书
法人代表证明书
2014/09/18 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
大学生十八大感想
2015/08/11 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android