- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用堆栈解决汉诺塔问题。这是我的代码:
Init_stack = [0,1,2,3]
Buffer_stack = []
Final_stack = []
n = len(Init_stack)
def move_disks(Init_stack, Buffer_stack, Final_stack, n):
if n == 0:
return
elif n == 1:
Final_stack.append(Init_stack.pop())
elif n == 2:
Buffer_stack.append(Init_stack.pop())
Final_stack.append(Init_stack.pop())
Final_stack.append(Buffer_stack.pop())
else:
move_disks(Init_stack, Final_stack, Buffer_stack, n-1)
Final_stack.append(Init_stack.pop())
move_disks(Buffer_stack, Init_stack, Final_stack,n-1)
当 Init_stack 的大小很小时,比如 < 10,这工作得很好。但是当我在大小为 100 的 Init_stack 上运行这段代码时,程序需要很长时间才能完成。你能告诉我为什么需要这么长时间吗?
最佳答案
汉诺塔需要 (2^n)-1
移动,其中 n 是环数。即使是极其高效的解决方案也需要很长时间才能完成 Python 中的许多操作。
(2^10)-1
等于 1023(每个计算机科学家都知道),但是 (2^100)-1
是一个 31 位十进制数.
关于python - 使用堆栈的 Hanoi Python 解决方案的递归塔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495780/
? 1 2
下面的代码解决了 hanoi 使用预定义函数 moveLOD、swapLOI 和 swapLID 返回 Action 列表的问题。 MoveLOD:将 1 个圆盘从第一个位置移动到三元组第三个位置中的
这个问题在这里已经有了答案: Tower of Hanoi: Recursive Algorithm (29 个答案) 关闭 6 年前。 我有以下汉诺塔的工作程序,我们将从 A--B 塔移动磁盘,C
如您所知,有一些解决汉内塔的方法,但它们要求开始时所有磁盘都在一个塔中。 现在我想知道有什么办法可以解决这个问题,开始时磁盘已经随机分布在塔中。 最佳答案 是的,它仍然是可解的(假设小磁盘之上没有大磁
这是来自 Facebook 招聘样本测试的问题。 有K个钉子。当从钉子的底部到顶部看时,每个钉子可以按半径递减的顺序固定圆盘。有 N 个圆盘,半径为 1 到 N;给定钉子的初始配置和钉子的最终配置,输
我的讲师在测试中向我们提出了以下问题: “给出以下代码: int count=0; static void towersOfhanoi(int n, char source, char target,
我理解递归的概念以及它如何与每次调用叠加。但我无法解释当有两个函数调用由 printf 命令分隔时,递归调用如何工作并打印。谁能向我解释一下这个递归调用是如何工作的? 我找到了一个关于名为“Tower
我正在尝试使用堆栈解决汉诺塔问题。这是我的代码: Init_stack = [0,1,2,3] Buffer_stack = [] Final_stack = [] n = len(Init_stac
这个问题在这里已经有了答案: Tower of Hanoi: Recursive Algorithm (29 个答案) 关闭 8 年前。 我是 Python 的新手,目前正在学习有关汉诺塔和递归的教
锁定。这个问题及其答案是 locked,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。 规则 汉诺塔是一个谜,如果你不是很熟悉它,这里是它的工作原理: 游戏场由 3 根杆和 x 个圆盘组
我正在实现汉诺塔问题以更多地了解递归。我能够使用 3 peg 的情况来实现它,但是,当我想使用更多的 peg(以产生更少的移动)时,我理解 Frame-Stewart 解决方案,我必须打破我拥有的磁盘
我想统计磁盘的移动次数。但结果我得到了别的东西。 (setq x 0) (defun towersOfHanoi (n from to help) (if (> n 0) ;progn ev
我正在学习 C++ 中的递归,但被以下用于解决汉诺塔问题的 C++ 代码难住了。 void Hanoi(int m, string start, string middle, string end){
这个问题在这里已经有了答案: How does recursive algorithm work for Towers of Hanoi? (2 个答案) 关闭 8 年前。 目前,我正在阅读道格拉斯
我正在尝试实现 Towers of Hanoi .我还没有在我的递归调用之间打印出任何东西,但我一直收到错误提示 '('(LIST) 'NIL 'NIL) should be a lambda exp
我是一名优秀的程序员,十分优秀!