问题标签 [ackermann]

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 投票
2 回答
1773 浏览

python - 是否可以在不超过最大递归深度的情况下在 python 中计算带有 args m>=4 和 n>=1 的递归 ackermann(m,n) 函数?

可以在不超过最大递归深度的情况下ackermann(m,n)使用参数m>=4和在 python中计算总可计算递归函数吗?n>=1

0 投票
2 回答
1181 浏览

python-3.x - 如何计算 Python 中函数的递归调用?

我在玩递归阿克曼函数。对于某些值,我的提示不会显示每个计算的输出,因为 Python 会如此快地超过其递归限制,以至于在“简单”部分赶上它之前冻结提示。

所以我想我可以在函数完全执行后添加一个递归计数器和一个快速暂停。我得到了预期的输出,直到它达到值 (1,0)。之后我得到了一个TypeError: can only concatenate tuple (not "int") to tuple.

我的代码如下:

请注意,删除rec(我的递归计数器)的所有实例,程序运行正常。(您可以看到 values 的所有输出i,j = 3

有人可以指出如何更正我的代码或提出一种不同的方法来查找 Ackermann 函数调用自身的次数吗?

另外,我注意到将限制设置为 5000 会使我的 python 内核崩溃得非常快。有上限吗?

我使用最新的 Anaconda。

编辑

我尝试使用列表作为具有以下数据的参数来实现相同的功能[i,j,output,#recursion]

但是这次我得到了一个IndexError: list index out of range,因为由于某种未知原因,我的列表被清空了

输出:

0 投票
0 回答
32 浏览

ruby - Ruby memoized 例程滞后?

修订 #3

我正在尝试使用原始的 3-arg 模型函数在 Ruby 中开发 Ackermann。我这样做的尝试似乎显示了 memoize'd 版本 - ack比原始版本花费更长的时间 -原始- 所以显然“某事”是错误的:

对于这个模块 Ackermann3.rb

修改了脚本以解决先前的评论 - 我遇到的错误,但我不明白为什么记忆的变体无效。

0 投票
2 回答
442 浏览

c++ - 使用 Ackermann 函数 C++ 进行记忆

好的,这是一个家庭作业,所以请试着指导我而不给我直接的答案。我正在尝试使用 Ackermann 函数(C++)来建立记忆。当达到 Ackermann(1,2) 时,它并没有达到我的预期。有些东西告诉我,我可能应该尝试建立 amap而不是 aarray用于记忆?任何输入表示赞赏。

所以下面是我的新方法。但我不知道为什么我不能memoMap.insert(make_pair(m, n), (acker(m - 1, 1)));在我的acker函数中使用?

0 投票
1 回答
468 浏览

c++ - 双递归函数

我想编写一个在 S. Wolf 的数学逻辑之旅中定义的函数(Ackermann 函数的修改版本),如下所示:

A(0,n)=n+1 对于每个 n

A(1,0)=2

A(2,0)=0

A(m+3,0)=1 对于每 m

A(m+1,n+1)=A(m,A(m+1,n)) 对于每个 m 和 n

为了制作一个更快的程序,我使用了以下事实

  • A(1,n)=n+2

  • A(2,n)=2n

  • A(3,n)=2^n

这是代码:

它似乎工作正常:手动 A(5,3)=2^16 这就是我得到的结果。但是,程序输出 A(5,4)=4 和 A(5,5)=2^16,而正确的结果确实很大。我无法在我的代码中发现错误。你能告诉我有什么问题吗?先感谢您。

0 投票
0 回答
261 浏览

python-3.x - 如何允许 python 递归计算超出设置的递归限制?

只是出于好奇,我决定举一个递归函数的例子。所以,我有这个递归函数(阿克曼函数):

如您所见,我尝试计算阿克曼值直到 ack(5,5)。

但是在打印到 ack(4,0) 后出现以下错误:

所以我尝试将递归限制增加到一个特别高的值:

但是现在我得到的值直到 ack(4,0) 并且内核死了。

如何在 python 中计算比 ack(4,0) 更高的值?编辑:刚刚意识到值 ack(4,2) 在当今世界实际上是不可计算的。那么,我如何计算 ack(4,1)?

0 投票
1 回答
191 浏览

r - 在 R 中使用 Ackermann 函数避免堆栈溢出

我最近看到了一个关于 Ackermann 函数的有趣的Computerphile 视频,并尝试在 R 中重新创建它,这就是我想出的:

在视频中,他们实现了自己的代码版本(我认为是 C 语言),并解释说对于特定的值对(例如 4,1)需要大量递归计算,并且需要 3 分钟来计算该值。如果我尝试用我的算法在 R 中重新创建它,我会得到堆栈溢出:

有没有办法在 R 中获得 Ackermann(4,1) 的结果?

0 投票
0 回答
201 浏览

recursion - 汇编中的阿克曼函数 - 陷入无限递归

我正在尝试将 Ackermann 函数编写为汇编代码(在 ARMV8 中)。

http://mathworld.wolfram.com/AckermannFunction.html https://en.wikipedia.org/wiki/Ackermann_function

它需要递归。我的代码进入无限递归。我找不到堆栈指针处理的问题。

X0 和 X1 是输入寄存器。我在 X0 中返回结果。

0 投票
2 回答
253 浏览

java - 支持 BigInteger 的 Java 实现 Ackermann 函数

我收到以下代码的 StackOverflowError(线程“main”java.lang.StackOverflowError 中的异常)。但该程序适用于 m=3、n=3(或其他较低值)但不适用于 m=4 和 n=2 或 3。

我理解的递归调用太多了。有没有办法摆脱这个错误?

谢谢。

0 投票
1 回答
145 浏览

c++ - 如何在 C/C++ 中无错误地运行阿克曼函数?

那么如何运行 Ackermann 的函数而不会Segmentation fault (core dumped)因为我的程序尝试访问/扩展它无法访问的内存而出错?也许将 GCC 的内存限制扩大到 256MB?它会在大约 9MB 的内存使用情况下导致此错误。我运行 Manjaro Linux

代码:

添加了用于重现结果的代码