递归实现汉诺塔

最近面试题,面试官让我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

回溯递归,设计起来还是很有难度的(在没有背过这个题目的前提下)

posted @ 2017-04-19 17:08  kuqs(奇小东)  阅读(163)  评论(0)    收藏  举报