Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pythonsys.setrecursionlimit函数内_Python_Recursion - Fatal编程技术网

pythonsys.setrecursionlimit函数内

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,

下面的代码是一个简化示例,我想在包装函数中设置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, 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。它也不适用于正确的固定代码。我将我的问题改写为一个可复制的示例。