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

时间:2018-08-14 09:33:01

标签: python-3.x recursion ackermann

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

def ack(a, b):
    if a == 0:
        return b + 1
    elif b == 0:
        return ack(a - 1, 1)
    else:
        return ack(a - 1, ack(a, b - 1))


for i in range(5):
    for j in range(5):
        print("ack(", i, ",", j, ")", "=", ack(i, j))

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

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

RecursionError: maximum recursion depth exceeded in comparison

因此,我尝试将递归限制提高到一个特别高的值,如下所示:

import sys
sys.setrecursionlimit(30000)

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

ack( 0 , 0 ) = 1
ack( 0 , 1 ) = 2
ack( 0 , 2 ) = 3
ack( 0 , 3 ) = 4
...
ack( 4 , 0 ) = 13

Kernel died, restarting

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

0 个答案:

没有答案