Python 的递归深度限制取决于解释器的设置,默认情况下,CPython 的递归深度限制是 1000 层。但可以通过 sys
模块来查询和修改递归深度限制。
1. 查询递归深度限制
使用以下代码可以查看当前的递归深度限制:
import sys
print(sys.getrecursionlimit())
默认输出一般是 1000
。
2. 修改递归深度限制
可以使用 sys.setrecursionlimit
来修改递归深度限制:
import sys
sys.setrecursionlimit(2000) # 设置新的递归深度限制为 2000
注意:
- 修改递归限制有风险,如果设置过高,可能会导致栈溢出,从而引发程序崩溃。
- 理论上,Python 的递归深度受限于操作系统分配的栈内存。较高的递归深度可能导致
RecursionError
或直接崩溃。
3. 建议
- 如果递归深度超过默认限制,优先考虑使用迭代算法替代递归。
- 在需要大量递归时,可以使用尾递归优化或其他语言(如支持尾递归优化的编程语言)来实现。
示例
以下代码展示了超过默认递归限制时的错误:
def recurse(n):
if n == 0:
return 0
return 1 + recurse(n - 1)
try:
recurse(1100) # 超过默认限制 1000
except RecursionError as e:
print(f"RecursionError: {e}")
如果设置足够的递归深度限制,代码会正常运行:
import sys
sys.setrecursionlimit(2000)
def recurse(n):
if n == 0:
return 0
return 1 + recurse(n - 1)
print(recurse(1100)) # 成功运行