开始使用免费开始使用

汉诺塔

在本练习中,您将用递归算法实现汉诺塔谜题。游戏目标是按照以下规则,把所有圆盘从三根柱子中的一根移动到另一根:

  • 每次只能移动一个圆盘。
  • 只能从某一堆的最上方取下圆盘,并将其放到另一堆的最上方。
  • 不能将较大的圆盘放在较小的圆盘上。

Picture of the game Tower of Hanoi

所示算法实现了该游戏,包含 4 个圆盘和名为 'A'、'B'、'C' 的 3 根柱子。代码中有两个错误。实际上,如果您运行它,会因为超过最大递归深度而导致控制台崩溃。您能找到并修复这些错误吗?

本练习是课程的一部分

Python 中的数据结构与算法

查看课程

练习说明

  • 修正基本情形。
  • 修正对 hanoi() 函数的调用。

交互式实操练习

通过完成这段示例代码来试试这个练习。

def hanoi(num_disks, from_rod, to_rod, aux_rod):
  # Correct the base case
  if num_disks >= 0:
    # Correct the calls to the hanoi function
    hanoi(num_disks, from_rod, aux_rod, to_rod)
    print("Moving disk", num_disks, "from rod", from_rod,"to rod",to_rod)
    hanoi(num_disks, aux_rod, to_rod, from_rod)   

num_disks = 4
source_rod = 'A'
auxiliar_rod = 'B'
target_rod = 'C'

hanoi(num_disks, source_rod, target_rod, auxiliar_rod)
编辑并运行代码