在 Python 中,递归深度是有限制的,这是为了防止无限递归导致栈溢出。默认情况下,Python 的递归限制通常是 1000 层(具体值可能因 Python 版本和实现而异)。
import sys
print(sys.getrecursionlimit()) # 输出当前递归限制
import sys
sys.setrecursionlimit(2000) # 将递归限制设置为2000
不要设置过高:设置过高的递归限制可能导致栈溢出和程序崩溃。通常不建议超过 10000。
考虑替代方案:如果需要处理深度递归,更好的方法是:
平台差异:不同操作系统和 Python 实现可能有不同的最大限制。
内存考虑:增加递归限制会消耗更多内存,因为每个递归调用都会占用栈空间。
import sys
def safe_set_recursion_limit(new_limit):
current_limit = sys.getrecursionlimit()
if new_limit > 10000:
print("警告:设置递归限制超过10000可能有风险")
sys.setrecursionlimit(new_limit)
print(f"递归限制已从 {current_limit} 更改为 {new_limit}")
# 使用示例
safe_set_recursionlimit(2000)
# 递归实现的阶乘
def factorial_recursive(n):
if n == 1:
return 1
return n * factorial_recursive(n-1)
# 迭代实现的阶乘(更安全)
def factorial_iterative(n):
result = 1
for i in range(1, n+1):
result *= i
return result
在大多数情况下,重写算法以避免深度递归是比增加递归限制更好的解决方案。