我想通过下面的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
答案 0 :(得分:1)
你得到一个maximum recursion depth exceeded
因为python试图保护自己免受可能的无限递归调用。基本上它会自行停止,以免造成可能更糟糕的崩溃。
您可以使用sys.setrecursionlimit
更改递归限制(如@falsetru所述)。
但正如@ThomasWouters在this answer中所说:
这样做很危险 - 标准限制有点保守,但Python堆栈框架可能非常大。"