首先,介绍一下这个问题。
注:图片源于百度。
现在三个盘子,只有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')