pythonsys.setrecursionlimit函数内
下面的代码是一个简化示例,我想在包装函数中设置recursionlimit:pythonsys.setrecursionlimit函数内,python,recursion,Python,Recursion,下面的代码是一个简化示例,我想在包装函数中设置recursionlimit: import sys def _f(m): #not meant to be useful, just an example if m == 0: return 1 else: return 4*_f(m-1) def f(m): sys.setrecursionlimit(m+2) _f(m) f(5000) ... File "<stdin>", line 5,
import sys
def _f(m): #not meant to be useful, just an example
if m == 0:
return 1
else:
return 4*_f(m-1)
def f(m):
sys.setrecursionlimit(m+2)
_f(m)
f(5000)
...
File "<stdin>", line 5, in _f
File "<stdin>", line 5, in _f
File "<stdin>", line 5, in _f
File "<stdin>", line 5, in _f
File "<stdin>", line 5, in _f
RuntimeError: maximum recursion depth exceeded
导入系统
定义f(m):#并不意味着有用,只是一个例子
如果m==0:
返回1
其他:
返回4*u f(m-1)
def f(m):
系统设置递归限制(m+2)
_f(m)
f(5000)
...
文件“”,第5行,in\u f
文件“”,第5行,in\u f
文件“”,第5行,in\u f
文件“”,第5行,in\u f
文件“”,第5行,in\u f
运行时错误:超过最大递归深度
为什么会发生这种情况?它看起来像是
\u f
调用f
,而调用sys.setrecursionlimit
的递归限制更小。另外,让\u f
和f
相互调用将使用两倍的堆栈帧数
我想你的意思是让\u f
自己来称呼自己
def _f(m):
if m == 0:
return 1
else:
#something = ...
return something*_f(m-1) # should call _f rather than f
def f(m):
sys.setrecursionlimit(m+5)
_f(m)
它看起来像是
\u f
调用f
,后者反过来调用具有较小递归限制的sys.setrecursionlimit
。另外,让\u f
和f
相互调用将使用两倍的堆栈帧数
我想你的意思是让\u f
自己来称呼自己
def _f(m):
if m == 0:
return 1
else:
#something = ...
return something*_f(m-1) # should call _f rather than f
def f(m):
sys.setrecursionlimit(m+5)
_f(m)
难道你不能重写这个函数来使用累加器吗?每次调用
f()
都会算作一级递归,你是不是用你传递的值来解释它?@kay这个代码大大简化了。我把它缩减到我能做的最简单的事情。递归函数需要更多的参数。难道你不能重写这个函数来使用累加器吗?每次调用f()
都会算作一级递归,你是否用你传递的值来解释它?@kay这个代码大大简化了。我把它缩减到我能做的最简单的事情。递归函数需要更多的参数。不幸的是,我在这里的代码是一个打字错误,因为我把我原来的函数名翻译成了f。它也不适用于正确的固定代码。我将我的问题改写为可复制的可复制示例。不幸的是,我在这里的代码是一个拼写错误,因为我将原始函数名翻译为f。它也不适用于正确的固定代码。我将我的问题改写为一个可复制的示例。