为什么递归lambda失败了很多

时间:2014-09-11 15:06:48

标签: python lambda

我想通过下面的python计算一个教堂号码,但是当我使用大于993的输入时它会提示错误,有经验的人告诉我发生了什么?

NUM0=lambda f: lambda x:x
SUCC=lambda n: lambda f: lambda x: f(n(f)(x))

def decoding(n):
    num=NUM0
    for i in xrange(n):
        num = SUCC(num)
    return num

def encoding(num):
    f=lambda x:x+1
    return str(num(f)(0))

print encoding(decoding(994)) # Why fails once greater than 993

1 个答案:

答案 0 :(得分:1)

你得到一个maximum recursion depth exceeded因为python试图保护自己免受可能的无限递归调用。基本上它会自行停止,以免造成可能更糟糕的崩溃。

您可以使用sys.setrecursionlimit更改递归限制(如@falsetru所述)。

但正如@ThomasWouters在this answer中所说:

  

这样做很危险 - 标准限制有点保守,但Python堆栈框架可能非常大。"