关于河内塔递归算法时间复杂度的问题

Posted

技术标签:

【中文标题】关于河内塔递归算法时间复杂度的问题【英文标题】:A question regarding the tower of hanoi recursive algorithm time complexity 【发布时间】:2021-02-21 10:45:20 【问题描述】:

我今天正在做一个编码练习。完成考试后,我检查了结果,遇到了一个问题,问题陈述如下:

给定河内塔问题中的 4 个磁盘,递归算法最多调用相同的函数 ___ 次。 A. 10 B. 16 C. 22 D. 31 我唯一知道的是我选择了 B. 16,我错了。 我在互联网上搜索发现它应该是 2n - 1 次或 15 次。 但是,它不在选项中。 哪个选项是正确的? 任何建议将不胜感激。 谢谢。

【问题讨论】:

也许他们的意思是我说的“最多”。 2^n -1 对于 4 个磁盘是 15 是解决难题所需的“最小”移动,但您可以在序列中添加不必要的步骤。虽然不确定正确答案。 【参考方案1】:

4 盘拼图需要 15 步。但是,递归调用的数量取决于它的实现方式。

如果您的递归基本情况是 1 个磁盘 => 1 次移动,则为 15。如果您的递归基本情况为 0 个磁盘 => 0 次移动,则为 31。

【讨论】:

以上是关于关于河内塔递归算法时间复杂度的问题的主要内容,如果未能解决你的问题,请参考以下文章

python每日算法 | 算法的起步与递归算法(汉诺塔问题)

河内塔与 K 钉

河内塔 C++(使用递归)

河内塔 - 如何不跳过每次递归的挂钩

[算法]汇总

如何通过限制运动递归解决河内塔?