Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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
Python 编写类似sys.getrecursionlimit的递归函数_Python_Recursion - Fatal编程技术网

Python 编写类似sys.getrecursionlimit的递归函数

Python 编写类似sys.getrecursionlimit的递归函数,python,recursion,Python,Recursion,如何编写一个类似sys.getrecursionlimit的递归函数,从而在不导入任何库的情况下获得递归限制 def recurse(n): m = 0 def recurse2(n): nonlocal m m = m+1 n-recurse2(n-1) try: recurse2(n) except RecursionError: print(m) 这就是我到目前为止所尝试的。您可以在递归函数中使用try/except来返回深度计数器: def

如何编写一个类似sys.getrecursionlimit的递归函数,从而在不导入任何库的情况下获得递归限制

def recurse(n):
m = 0
def recurse2(n):
    nonlocal m 
    m = m+1
    n-recurse2(n-1)
try: 
    recurse2(n)
except RecursionError:
    print(m)

这就是我到目前为止所尝试的。

您可以在递归函数中使用
try/except
来返回深度计数器:

def _get_recursion_limit(n = 1):
  try:
     return _get_recursion_limit(n+1)
  except RecursionError:
     return n+1 #account for last attempt with increment

import sys
print(_get_recursion_limit())
print(sys.getrecursionlimit())
输出:

1000
1000

在我的机器上,两个结果都是
1000

将计数器向下传递到每个函数,而不是尝试访问函数范围外的变量,这是最简单的方法:

def get_limit():
    try:
        return 1 + get_limit()
    except RecursionError:
        return 2
这为我提供了
1000
——就像
sys.getrecursionlimit()


为什么?

因此,在函数的每次调用中,函数都会在可以进行多少次递归调用的结果中添加一次。这个问题的答案“可以进行多少[更多]递归调用?”由函数本身简单地回答,因此我们返回
1
+
get\u limit()
,因为我们被调用,所以我们必须再返回一个

最后,我们必须定义一个基本情况,它位于树的底部,并处理“可以进行多少[更多]递归调用?”的答案是
RecursionError
,即“不再”的情况。在本例中,真正的答案是
1
,但由于实际函数将被调用一次,因此我们应该返回
2
,以说明树/堆栈顶部的调用,因此在我的情况下,我们的结果是
1000
,而不是返回
1
时的
999