汉诺塔的移动可以用递归函数非常简单地实现。
题目: 请编写
move(n, a, b, c)
函数,它接收参数n
,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法
[思路]
假设:A柱子只有两个盘,上面为n-1个小盘,下面为1个大盘;B:0盘;C:0盘
移动步骤①:A柱的n-1个盘,借助C柱的缓冲,移动到B柱,move(n-1,a,c,b)
移动步骤②:A柱的1个盘,借助B柱的缓冲,移动到C柱,move(1,a,b,c)
移动步骤③:B柱的n-1个盘,借助A柱的缓冲,移动到C柱,move(n-1,b,a,c)
[代码]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
def move(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move(3, 'A', 'B', 'C')
[输出]
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C