汉诺塔解释

4 投票
1 回答
3556 浏览
提问于 2025-04-17 17:57

我刚开始学习Python,想知道在这个汉诺塔函数中,if 语句的作用是什么:

def hanoi(ndisks, startPeg=1, endPeg=3):
    if ndisks:
        hanoi(ndisks-1, startPeg, 6-startPeg-endPeg)
        print "Move disk %d from peg %d to peg %d" % (ndisks, startPeg, endPeg)
        hanoi(ndisks-1, 6-startPeg-endPeg, endPeg)

hanoi(ndisks=4)

1 个回答

4

递归算法需要一个终止条件,这个条件通常代表算法中最简单的情况。对于汉诺塔问题来说,最简单的情况就是没有盘子需要移动,这时候什么都不用做。

在Python中,任何数字为零的情况都被视为“假”,所以如果有人把负数传给你的算法,它就会出错。因此,最好检查一下 if ndisks > 0。这样可以在盘子数量为零时停止递归。

如果有一个正数(n)个盘子需要移动,递归算法的步骤是:

  1. 把 n-1 个盘子从起始柱子移动到“另一个”柱子。
  2. 把第 n 个盘子从起始柱子移动到结束柱子。
  3. 把 n-1 个盘子从“另一个”柱子移动到结束柱子。

以上就是你代码的其余部分,终止条件就是盘子数量为零。

撰写回答