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自定义函数的创建、调用和函数的参数详解
Mar 11 Python
python 读写、创建 文件的方法(必看)
Sep 12 Python
Django基础之Model操作步骤(介绍)
May 27 Python
python 接口返回的json字符串实例
Mar 27 Python
对python中的xlsxwriter库简单分析
May 04 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
python 自定义装饰器实例详解
Jul 20 Python
flask 实现token机制的示例代码
Nov 07 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 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
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
Python中生成Epoch的方法
2017/04/26 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python3对接mysql数据库实例详解
2019/04/30 Python
django如何实现视图重定向
2019/07/24 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
django rest framework 过滤时间操作
2020/07/12 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
介绍一下except的用法和作用
2015/01/22 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
2014国培学习感言
2014/03/05 职场文书
个人担保书格式范文
2014/05/12 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python
CentOS MySql8 远程连接实战
2022/04/19 MySQL
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers