【问题标题】:Towers of Hanoi Explanation河内塔的解释
【发布时间】:2013-02-19 08:01:38
【问题描述】:

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

【问题讨论】:

  • 射击,我不知道如何在发布我的问题时标记我的空格......
  • 当您输入问题或答案时,文本框上方有一个代码格式按钮,其中一些括号 {} 作为其图标,突出显示您的代码,然后单击它。
  • 你在这里问的不是一个真正的问题。如果这是“你的”功能,你有什么不明白的?你了解 Python 语法吗?你了解底层算法吗?
  • 我猜我不太了解底层算法。主要是为什么有一个if语句。抱歉,我对此还是很陌生。
  • if 语句确保 ndisks 大于 1

标签: python recursion towers-of-hanoi


【解决方案1】:

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

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

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 2014-02-18
  • 2012-09-13
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多