汉诺塔解释
我刚开始学习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)个盘子需要移动,递归算法的步骤是:
- 把 n-1 个盘子从起始柱子移动到“另一个”柱子。
- 把第 n 个盘子从起始柱子移动到结束柱子。
- 把 n-1 个盘子从“另一个”柱子移动到结束柱子。
以上就是你代码的其余部分,终止条件就是盘子数量为零。