algorithm - 河内塔使用头递归?
问题描述
我想知道标准的河内塔问题是否可以使用头递归来解决。我有一个模糊的想法,即不可能使用相同编号的圆盘(从 1(最小)到 N(最大)圆盘)和 3 个塔。
解决方案
对于您可能的意思的最明智的版本,不。从技术上讲,答案是肯定的。
河内塔问题的重点在于,一个看似简单的问题需要两次递归调用。这立即意味着它不能用尾递归或头递归自然地解决。
然而,该解决方案可以在迭代算法中完全分析和解决。我们可以检查一个位置,计算我们必须在解决方案中的位置,并产生下一个答案。有关此分析的示例,请参见https://www.geeksforgeeks.org/iterative-tower-of-hanoi/ 。
并且可以使用单个迭代循环编写的内容始终可以使用尾递归或头递归从那里重写。通过执行一次迭代然后进行递归调用以在循环中继续,您可以获得尾递归。通过首先进行递归调用以到达当前所需的位置,然后进行当前迭代,您可以获得头部递归。
所以,是的,通过大量的努力,你可以获得头部递归,它伴随着可怕的记忆和性能特征。
推荐阅读
- javascript - 执行命令 InsertHTML 未插入内容可编辑 Div 标记的正确位置
- raspberry-pi - 如何将 Raspberry pi 4 连接到 pixhawk?
- elasticsearch - geoip.location 不适用于通过 logstash 发送的修改后的索引名
- python - 如何通过对第 3 列中的值求和来将前 2 列中具有相同值的 Pandas Dataframe 行组合在一起?
- python - Python:从数据框中的对角线值创建列表
- java - 使用箭头键导航到 ToggleGroup 时选择 RadioButton
- javascript - SQL While 语句中的引导模式一直显示第一条记录内容
- javascript - 当我在 ejs 中使用脚本标签时没有任何反应
- java - 当我生成一个 java Calendar 对象时,我在生成什么?
- asp.net-core - 在 .NET 核心中创建 JWT 的问题