汉诺塔问题描述:
如图,有A ,B , C三个柱子,A上有n个盘子,每次只能从A上移动一个盘子,且必须保证大盘子在小盘子下面。问如何将A上的盘子移动到C盘??
思考:编写move(n, a, b, c)
函数,它接收参数n
,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法,代码如下:
def move(n,a,b,c):
if n == 1:
print(a, '-->', c) else: move(n-1,a,c,b)#a柱最上方的n-1个盘子落在b柱 move(1,a,b,c)#a柱的最小面盘子落在c柱 move(n-1,b,a,c)#b柱上的n-1个盘子,落在c柱
#当A有3个盘子的时候
move(3,'A','B','C')
运行结果如下:
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
复杂度分析: