首页 > 解决方案 > 编写类似于 sys.getrecursionlimit 的递归函数

问题描述

如何编写一个类似于 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)

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

标签: pythonrecursion

解决方案


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

def get_limit():
    try:
        return 1 + get_limit()
    except RecursionError:
        return 2

这给1000了我 - 就像sys.getrecursionlimit().


为什么?

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

最后,我们必须定义一个基本情况,它将位于树的底部并处理“可以进行多少[更多]递归调用?”的答案。是RecursionError,即“不再”。在这种情况下1,真正的答案是如果我们回来了。210009991


推荐阅读