4

我是 python 的初学者,想知道if语句在这个 Towers of Hanoi 函数中的作用:

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)
4

1 回答 1

4

递归算法需要一个终止条件,它通常代表算法的最简单情况。对于河内塔,最简单的情况是当有零个磁盘要移动时,什么都不做。

在 Python 中,“错误”的一个条件是任何数字版本的零,因此从技术上讲,如果有人将负数传递给您的算法,它将失败,因此最好检查if ndisks > 0. 这会在 ndisks==0 时停止递归。

如果有正数 (n) 个要移动的磁盘,则递归算法为:

  1. 将 n-1 个磁盘从起始钉移动到“其他”钉。
  2. 将第 n磁盘从起点移动到终点。
  3. 将 n-1 个磁盘从“其他”挂钩移动到末端挂钩。

上面描述了您的代码的其余部分,终端条件是零磁盘。

于 2013-03-05T03:26:29.110 回答