问题标签 [towers-of-hanoi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
181 浏览

java - 河内之塔 - 为用户中期游戏提供帮助

我已经成功地用 Java 构建了具有用户交互性的河内塔游戏。

但是,我还想添加一个功能,如果用户要求提示,程序会以最有效的方式为用户执行下一步操作。

我知道可以使用递归来解决游戏,但据我所知,我不能在游戏中期使用递归来给出答案。

你们有什么建议吗?

0 投票
2 回答
1181 浏览

c - Need an explanation of the recursive calls in "Towers of Hanoi"

I understand the concept of recursion and how it stacks up with each call. But I fail to explain how recursive calls are working and gets printed when there are two function call separated by a printf command. Can anyone explain to me how this recursive call is working?

I have found an example regarding a game called "Towers of Hanoi". Ut was used as an example of recursion. The code:

for n=3 it gives output like this

0 投票
1 回答
1177 浏览

python - 在河内塔中找到第 k 步

为什么要看 2^(n-1) 移动?你能解释一下代码吗?

0 投票
4 回答
5017 浏览

python - 河内塔与python中的“计数器”

我在 python 中为“河内之塔”编写了一个代码,我正在尝试添加一个计数器来显示它运行了多少次。我尝试了几种方法,例如 while 循环和 for 循环等,但它不起作用。我确信答案很简单,但我的大脑现在正在最低设置下运行。我的代码如下所示:

我知道代码必须运行 (2^n)-1 次,但我无法实现它。因为我编写代码的方式,值 n 发生了变化,所以这对我有用。(我尝试过这样的事情:

但正如我所说,值 n 改变了,我不知道如何解决它。

编辑:

为了澄清,我希望它像这样购买步骤数:(如果我打电话给 Hanoi(3,0,2,1))

0 投票
1 回答
2710 浏览

python - 河内塔有 4 座塔

到目前为止,我知道如何用 3 座塔来建造河内塔,但我不知道如何为 4 座塔实施 Frame Steward 算法。

这就是我目前的三塔功能的样子。

我需要帮助使用 4 个塔将 n - k 个磁盘实施到另一个塔。对于一些 1 ≤ k < n

这是我对算法的尝试,但它不起作用,请帮忙。

0 投票
1 回答
563 浏览

haskell - 河内哈斯克尔塔

我真的是使用 Haskell 的新手。我正在尝试编写一个 h4 函数,它将计算使用 4 桩完成河内塔的最小步骤。我已经知道如何使用 3 堆或 h3 来计算它。我的主要问题是使用列表理解并返回最小值,还使用记忆化来确保我可以快速运行我的代码。当我运行我的 h4 函数时,我忘了包括我有一个错误。它是说“|”有问题。我是haskell的新手,无法调试,因为我不确定问题出在哪里。

这就是我下面的内容:我的 h3 函数工作正常。我需要帮助,主要是我的 h4

我的伪代码是:

我感谢所有的帮助和建议。我决定通过添加 memoized 函数来改进我的 h4 函数,以确保我更快地获得输出。当我运行我的 h4 memoized 函数时,我收到此错误:16:1:不在范围内:`memoized_h4'h3 :: Int -> Integer

0 投票
0 回答
667 浏览

android - Android Handler.postDelayed 在 Recursion 中的使用

我正在创建一个基于河内塔的应用程序,其中包括每个动作的动画,所有动作都不到一秒。我有一种选择,您可以手动解决难题,另一种选择是程序自行解决难题,显示所有动画。当程序尝试自行解决难题时,就会出现我的问题。我一直在尝试handler.postDelayed在拼图使用的递归方法中使用,以便在尝试开始下一个动画之前给每个动画时间完成:

image.get(to)image.get(from)为目标塔返回一个可点击的 ImageView。单击它们时,其他方法会运行正确的动画。当我手动解决难题时,我没有遇到任何问题,所以我怀疑这是可点击图像或动画的问题。问题似乎是程序没有足够的时间在开始第二个动画之前完成第一个动画的执行。按照我的方法设置方式,如果一个动画在另一个动画完成之前尝试开始,它会崩溃。(这在手动执行期间不是问题。)当我运行程序时,在第一个动画之前有很长的停顿,并且在该动画完成后立即崩溃。那么,这是我放置延迟、时间或其他东西的问题吗?如果您需要查看更多我的代码,请询问。提前致谢!

0 投票
2 回答
81 浏览

java - 非静态方法 towersOfHanoi(int, int, int, int) 不能从静态上下文中引用?

当我编译测试器时,它在第 9 行说:

非静态方法 towersOfHanoi(int, int, int, int) 不能从静态上下文中引用

为什么它不能到达 towersOfHanoi 方法?

我提供了以下两个类。

0 投票
3 回答
98 浏览

java - 河内塔,工作但不应该

所以我们有经典的河内问题,我刚刚进入这个递归的东西,它是一个doozie!这是功能齐全的,但我只是不明白它是怎么回事!据我了解,对于任何 n,它将打印“从 +”到“+ thru”,这将在每次 n 接近 1 时发生。人们会认为在 n=1 时,代码会停止,然而我得到了“thru +”的打印输出到“+ to”(最后一个打印输出)。如果 n=1 是终止条件,我怎么可能“免费”获得最后一部分代码?

我还希望代码至少在每次迭代时执行最后一次打印输出,但没有!此外,这方面的示例总是包括两个递归调用,但只有一个就可以了!这到底是怎么回事?这段代码是如何一步一步执行的?我是否误解了一些关于递归方法的基本事实?(在 Eclipse 编译器上编译)。

0 投票
5 回答
23936 浏览

python - 河内之塔 Python - 理解递归

我对 Python 完全陌生,目前正在阅读有关河内塔和递归的教程。我以为我理解递归,直到他们给出这个例子:

打印正确的移动以解决 3 个圆盘的河内塔问题: 将磁盘从 A 移动到 B 将磁盘从 A 移动到 C 将磁盘从 B 移动到 C 将磁盘从 A 移动到 B 将磁盘从 C 移动到 A 将磁盘从 C 移动到 B 将磁盘从 A 移动到 B

我的问题是,它是如何做到的?!有人可以检查代码行,以便我了解它如何打印正确的动作吗?我主要对fpand的值如何tpAtoB变为 to感到困惑C。对不起,如果这是一个广泛的问题!任何帮助将不胜感激!