我是 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)

最佳答案

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

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

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

  • 将 n-1 个磁盘从起始 Hook 移动到“其他” Hook 。
  • 从头到尾移动第 n 个磁盘。
  • 将 n-1 个磁盘从“其他” Hook 移动到结束 Hook 。

  • 以上描述了代码的其余部分,最终条件是零磁盘。

    关于python - 汉诺塔解说,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15214998/

    10-12 21:55