本文实例讲述了Python递归实现汉诺塔算法。分享给大家供大家参考,具体如下:
最近面试题,面试官让我5分钟实现汉诺塔算法(已然忘记汉诺塔是啥)。
痛定思痛,回来查了一下汉诺塔的题目和算法。题干与实现如下:
A基座有64个盘子,大在下小在上,每次移动一个盘子,每次都需要大在下小在上,全部移动到B基座,C基座为辅助基座。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# -*- 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 |
运行结果:
1
|
[ 2 , 1 , 0 ] |
回溯递归,设计起来还是很有难度的(在没有背过这个题目的前提下)
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://www.cnblogs.com/kuqs/p/6734418.html