有没有大神解释一下每一步是怎么出来的
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
2018-09-17
首先明确盘子只能从小到大堆放并且只能一个一个的挪动,也就是说每次只能挪动顶部的盘子也就是最小的那个,而现在要将A上的n个盘子移到C上怎么办呢?我们可以用数字1,2,3类比一下
A B C
初始 1 2 3
A --> C 2 3 1
A --> B 3 2
C --> B 3 1 2
A --> C 1 2 3
B --> A 1 2 3
B --> C 1 2 3
A --> C 1 2 3
这样看起来是不是很复杂呢?其实用递归就很好理解,首先
move(n-1, a, c, b) print a, '-->', c 这两句可以看作把A中的n-1个递归到B中,然后A中的最大数必定最后递归到C中,因此我们把它
手动打印出来
move(n-1, b, a, c) 最后 我们把B中剩下的n-1个递归到C中完成要求
#-*- coding:utf-8 -*-
# move(n, a, b, c)表示的是有n个盘子在a柱子上,将要移到b柱子上面去
def move(n, a, b, c):
# 如果a柱子上面只有一个盘子,则直接移到c柱子上面去并输出路径,结束递归
if n == 1:
print a, '-->', c
return
# 表示的是将n-1的盘子从a柱子上面移到b柱子上面去
move(n-1, a, c, b)
# 输出最下面个盘子移从a移到c的路径
print a, '-->', c
# 将b柱子上面的n-1个盘子移动到c柱子上面
move(n-1, b, a, c)
move(4, 'A', 'B', 'C')
举报