我想知道是否可以使用头递归来解决标准的河内塔问题。我有一个模糊的想法,即不可能使用相同编号的光盘(从1个(最小)到N个(最大)光盘)和3个塔来实现。
答案 0 :(得分:0)
对于您可能要说的大多数明智版本,不。从技术上讲,答案是肯定的。
河内塔问题的全部要点是,一个看似简单的问题需要两个递归调用。这立即意味着不能通过尾部递归或头部递归自然解决它。
但是,可以使用迭代算法对解决方案进行完全分析和求解。我们可以检查一个位置,计算必须在解决方案中的位置,然后得出下一个答案。有关此分析的示例,请参见https://www.geeksforgeeks.org/iterative-tower-of-hanoi/。
使用单个迭代循环可以写的内容始终可以使用尾部递归或头部递归从那里重写。通过执行一次迭代,然后进行递归调用以继续循环,即可获得尾递归。首先执行递归调用以到达当前所需的位置,然后执行当前迭代即可获得头部递归。
是的,只要付出很多努力,您就可以凭借其可怕的内存和性能特征来进行头部递归。