问题:汉诺塔的移动可以用递归函数非常简单地实现。请编写move(n, a, b, c)
函数,它接收参数n
,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法。
问题源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
我们可以理解move(n,a,b,c)函数中对应的a表示起始位置,b表示中间位置,c表示最终要移到的位置,可以分为下面3个部分理解
将n-1个盘子从a移到b
将最后1个盘子从a移到c
- 将n-1个盘子从b移到c
#!/usr/bin/env python3
#-*- conding: utf-8 -*-
def move (n,a,b,c):
if n ==1:
print('move',a,'-->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
n=float(input('请输入n='))
print('结果如下所示')
print(move(n,'A','B','C'))
结果显示如下:
输入n=3时
请输入n=3
结果如下所示
move A --> C
move A --> B
move C --> B
move A --> C
move B --> A
move B --> C
move A --> C
输入n=5时
请输入n=5
结果如下所示
move A --> C
move A --> B
move C --> B
move A --> C
move B --> A
move B --> C
move A --> C
move A --> B
move C --> B
move C --> A
move B --> A
move C --> B
move A --> C
move A --> B
move C --> B
move A --> C
move B --> A
move B --> C
move A --> C
move B --> A
move C --> B
move C --> A
move B --> A
move B --> C
move A --> C
move A --> B
move C --> B
move A --> C
move B --> A
move B --> C
move A --> C