0

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

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))

如您所见,我尝试计算阿克曼值直到 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)?

4

0 回答 0