汉诺塔问题算法实现 - Python 代码详解
汉诺塔问题是经典的递归问题,其算法实现如下:
-
如果只有一个盘子,直接将其从起始柱子移动到目标柱子。
-
如果有多个盘子,分三步进行:
a. 将前 n-1 个盘子从起始柱子移动到辅助柱子,利用目标柱子作为辅助。 b. 将最后一个盘子从起始柱子移动到目标柱子。 c. 将前 n-1 个盘子从辅助柱子移动到目标柱子,利用起始柱子作为辅助。
可以用递归来实现上述过程。具体实现代码如下:
def hanoi(n, start, end, helper):
if n == 1:
print(f'Move disk 1 from {start} to {end}')
else:
hanoi(n-1, start, helper, end)
print(f'Move disk {n} from {start} to {end}')
hanoi(n-1, helper, end, start)
其中,n 表示盘子的数量,start、end 和 helper 分别表示起始柱子、目标柱子和辅助柱子。当 n=1 时,直接将盘子从起始柱子移动到目标柱子;否则,将前 n-1 个盘子从起始柱子移动到辅助柱子,将最后一个盘子从起始柱子移动到目标柱子,最后将前 n-1 个盘子从辅助柱子移动到目标柱子。
可以调用该函数进行测试,例如:
hanoi(3, 'A', 'C', 'B')
输出结果为:
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
原文地址: https://www.cveoy.top/t/topic/ornv 著作权归作者所有。请勿转载和采集!