河内塔解释

时间:2013-03-05 02:52:30

标签: python recursion towers-of-hanoi

我是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 个答案:

答案 0 :(得分:4)

递归算法需要终端条件,这通常代表算法的最简单情况。对于河内塔来说,最简单的情况是当零磁盘移动时,不要做任何事情。

在Python中,有一个" falseness"是零的任何数字版本,所以从技术上讲,如果有人向您的算法传递负数,它将失败,因此最好检查if ndisks > 0。当ndisks == 0时,这会停止递归。

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

  1. 将n-1个磁盘从start peg移动到"其他"钉。
  2. 从头到尾移动n th 磁盘。
  3. 从"其他"移动n-1个磁盘peg to end peg。
  4. 上面介绍了其余代码,终端条件为零磁盘。