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不规范的日期字符串处理类
Jun 10 Python
浅析python 内置字符串处理函数的使用方法
Jun 11 Python
python字典键值对的添加和遍历方法
Sep 11 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
python中字符串的操作方法大全
Jun 03 Python
Python制作动态字符图的实例
Jan 27 Python
python移位运算的实现
Jul 15 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
python 第三方库paramiko的常用方式
Feb 20 Python
神经网络训练采用gpu设置的方式
Mar 03 Python
Python使用scapy模块发包收包
May 07 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
长波有什么东西
2021/03/01 无线电
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
python爬取各类文档方法归类汇总
2018/03/22 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
致标枪运动员加油稿
2014/02/15 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
工资收入证明
2014/10/07 职场文书
婚育证明样本
2015/06/16 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书