python实现汉诺塔问题递归解法

首先,介绍一下这个问题。

注:图片源于百度。

现在三个盘子,只有A盘放在大小各不相同的n个盘子,现在要求移动A上所有盘子到C上,且保持从上向下是由小变大的顺序。

移动过程遵循下面规则:

1.一次只能移动一个盘子 且最上面一个。

2.移动过程中,任意保持状态下,小盘子在上,大盘子在下。

分析:要保证一次一片且大的在下就是要A上的最下面一个到C,而此时A上的n-1个在B上依靠(方法是不断通过C使这n-1个到B),随后问题变为C还是目标,A变为暂存n-2个依靠,B是放所有n-1个地方(也就是A,B地位互换),以此递归。

def hannuo(n, a, b, c):
    if n == 1:
        print(a, "---->", c)
        return None
    hannuo(n - 1, a, c, b)
    print(a, "---->", c)
    hannuo(n - 1, b, a, c)


hannuo(5, 'A', 'B', 'C')

猜你喜欢

转载自blog.csdn.net/zhouchen1998/article/details/81153745