Python 编写类似sys.getrecursionlimit的递归函数
如何编写一个类似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
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