python - 编写类似于 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)
这是我到目前为止所尝试的。
解决方案
最简单的方法是将计数器向下传递给每个函数,而不是尝试访问函数范围之外的变量:
def get_limit():
try:
return 1 + get_limit()
except RecursionError:
return 2
这给1000
了我 - 就像sys.getrecursionlimit()
.
为什么?
因此,在每次调用函数时,函数都会在可以进行多少次递归调用的结果上加一。这个问题的答案是“可以进行多少 [更多] 递归调用?” 简单地由函数本身回答,所以我们返回1
+ get_limit()
,因为我们被调用了,所以我们必须再返回一个。
最后,我们必须定义一个基本情况,它将位于树的底部并处理“可以进行多少[更多]递归调用?”的答案。是RecursionError
,即“不再”。在这种情况下1
,真正的答案是如果我们回来了。2
1000
999
1
推荐阅读
- swift - 在Swift中将给定字符串中的数字转换为字符串
- python - 斯坦中的“错误:模型块中不存在变量“真实”
- python - 在 GEE Python API 的 inner.Join 函数中使用过滤器函数
- sql-server - 如何将第二行移动到sql中的列?
- javascript - 使用 cocoon gem 为每个项目添加唯一 ID - Ruby On Rails
- java - ElasticSearch 使用 Java RestHighLevelClient 使用 BulkRequest API 索引 100K 文档
- for-loop - Android Kotlin 用 for next 循环替换 while
- c++ - 为什么 C++ 的 void 类型只是半心半意的单元类型?
- html - 为什么孩子的绝对定位会使父母的身高崩溃?
- python - vscode的python扩展是否支持鸡蛋自动补全?