汉诺塔问题是经典的递归问题,其算法实现如下:

  1. 如果只有一个盘子,直接将其从起始柱子移动到目标柱子。

  2. 如果有多个盘子,分三步进行:

    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
汉诺塔问题算法实现 - Python 代码详解

原文地址: https://www.cveoy.top/t/topic/ornv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录