【发布时间】:2020-04-29 16:43:45
【问题描述】:
我最近编写了一个使用递归求解河内塔的程序。但是有没有办法在不使用堆栈或递归的情况下解决这个难题——最好是循环或按顺序排列的东西。
这是我使用递归编写的代码:
static void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod)
{
if (n == 1)
{
System.out.println("Move disk 1 from rod " + from_rod + " to rod " + to_rod);
return;
}
towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
System.out.println("Move disk " + n + " from rod " + from_rod + " to rod " + to_rod);
towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}
提前感谢您的帮助:)
【问题讨论】:
-
提示:您通常可以将递归实现替换为使用显式循环和stack 的实现。
-
河内问题是基于基于略微变化的参数的重复动作 - 坦率地说,我不知道以另一种方式实现:/
-
这太模糊/宽泛了。您应该尝试自己解决它,并在解决后提出具体问题。关于问题的维基百科页面应该是一个很好的起点:en.wikipedia.org/wiki/Tower_of_Hanoi。
-
@MattBall OP 询问是否可以在没有递归和堆栈的情况下完成。具有循环和堆栈的解决方案使用堆栈,因此 OP 需要不同的解决方案。使用堆栈和递归都被认为是递归过程,因此它们对于 CPU 来说确实是相同的。
-
请尝试一些研究,例如
towers of hanoi without recursion/stacks(来自问题标题)的网络搜索将为您提供您所寻求的答案。问题因缺乏研究而被否决。
标签: java loops recursion methods towers-of-hanoi