python 中的 sys.setrecursionlimit() 和递归

sys.setrecursionlimit() and recursion in python

提问人:Tarun_Saini 提问时间:9/18/2023 最后编辑:quamranaTarun_Saini 更新时间:9/18/2023 访问量:39

问:

我不明白为什么代码运行 170 次而不是通过将其限制设置为 200 来使用该函数。sys

import sys
i=0
def fun1():
    global i
    print("hello i = ",i)
    i+=1
    fun1()
print("Welcome")
sys.setrecursionlimit(200)
fun1()
print(sys.getrecursionlimit())

为什么我的代码只运行 170 次,而不是它应该运行 200 次。 另外,您能解释一下内部是如何给我错误的吗?fun1fun1

我不知道有些人在说,在木星以外的其他编辑器中,它给出了正确的结果。 但是当我使用 Jupyter 时,它给出了 170 次错误的结果。

Python 递归 sys

评论

3赞 Matthias 9/18/2023
170 似乎有点低,但你永远不会达到 200。 设置 Python 解释器堆栈的最大深度,而不是仅设置一个特定递归的限制。Jupyter 似乎在执行代码之前会自行进行一些调用。setrecursionlimit
3赞 AKX 9/18/2023
确切地说:Jupyter 是用 Python 编写的,显然在运行代码之前大约有 30 个堆栈帧。(看看裸露给你什么。traceback.print_stack()
0赞 matleg 9/18/2023
在我的笔记本电脑上,它是 168,当深度增加到 1000 时是 968。也确认你的解释,谢谢!
0赞 ggorlen 9/18/2023
这回答了你的问题吗?Python 最大递归,关于 sys.setrecursionlimit() 的问题
2赞 ggorlen 9/18/2023
如果你正在考虑搞砸,最好使用迭代,而不是试图进一步踢罐子。将递归限制视为不可触及的实现细节。setrecursionlimit()

答: 暂无答案