您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页在Python程序中设置函数最大递归深度

在Python程序中设置函数最大递归深度

来源:五一七教育网

 

在函数调用时,为了保证能够正确返回,必须进行保存现场和恢复现场,也就是被调函数结束后能够回到主调函数中离开时的位置然后继续执行主调函数中的代码。这些现场或上下文信息保存在线程栈中,而线程栈的大小是有限的。

对于函数递归调用,会将大量的上下文信息入栈,如果递归深度过大,会导致线程栈空间不足而崩溃。

在Python中,为了防止栈崩溃,默认递归深度是有限的。

# 这是一个简单的递归函数
def demo(n=0):
    try:
        demo(n+1)
    except:
        print(n)

demo()

通过这个简单的无限递归,你会发现并没有无限下去,而是到了一个限度就没有递归了,这是默认的递归是有限度的。

但是你可以通过修改默认递归深度来控制他例如:

import sys
# 如果确实需要很深的递归深度,可以使用sys模块中的setrecursionlimit()函数修改默认的最大深度。
sys.setrecursionlimit(1000)
# 这是一个简单的递归函数
def demo(n=0):
    try:
        demo(n+1)
    except:
        print(n)

demo()

这次的递归深度明显就比上一次的不一样了。再用一个例子来说明一下:
 

import sys
from functools import lru_cache

# 如果确实需要很深的递归深度,可以使用sys模块中的setrecursionlimit()函数修改默认的最大深度。
sys.setrecursionlimit(3000)

@lru_cache(maxsize=)
def cni(n, i):
    if n == i or i == 0:
        return 1
    return cni(n - 1, i) + cni(n - 1, i - 1)


print(cni(900, 100))

这也是一个修改默认的最大的递归了

转载于:https://www.cnblogs.com/Apy-0816/p/11100270.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务