Python递归实现汉诺塔算法示例

yipeiwu_com6年前Python基础

本文实例讲述了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函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

Python实现的多叉树寻找最短路径算法示例

本文实例讲述了Python实现的多叉树寻找最短路径算法。分享给大家供大家参考,具体如下: 多叉树的最短路径: 思想:     传入start 和 end 两...

Python读取网页内容的方法

本文实例讲述了Python读取网页内容的方法。分享给大家供大家参考。具体如下: import urllib2 #encoding = utf-8 class Crawler: d...

Ranorex通过Python将报告发送到邮箱的方法

Ranorex通过Python将报告发送到邮箱的方法

Ranorex测试报告如何发送到邮箱在网上看了下,其实可以通过在Ranorex上或者VS调用编写发送邮箱代码就可以执行发送了,RX主要涉及到的开发语言是C++或者.NET。但是我想用Py...

用Django写天气预报查询网站

用Django写天气预报查询网站

创建项目 创建工程项目如下所示: 设置文件settings.py中的设置主要有两个 1.注册app 2.设置templates的路径 前面的文章已经介绍过多次如何设置了,此处不再做详...

Python处理中文标点符号大集合

中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏。以下为在下处理中文标点的时候采用的两种方法: 中文标点集合 比较常见标点有这些: !?...