15.Python函数进阶_递归函数

本文介绍了Python递归函数的基本概念,包括如何定义递归函数,设置递归边界以避免无限循环。同时,讨论了Python的默认递归限制,并展示了如何通过sys模块调整。此外,还探讨了递归缓存机制,特别是lru_cache装饰器的应用,以优化性能并避免重复计算导致的内存消耗问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.递归函数:

  • 递归函数:在函数内部可以调用函数自身;
  • 递归边界:退出递归的终止条件

使用递归实现累加和阶乘:

#实现累加
def add(n):
    if n == 1:  #递归边界
        return n
    else:
        sum = n + add(n-1)
        return sum

print(add(5))


#实现阶乘
def fun(m):
    if m == 1:
        return m
    else:
        result = m*fun(m-1)
        return result
print(fun(3))

注意一定要设置终止条件不然容易变成死循环;

2.设置递归最大值

Python一般有最大递归限度;可以通过sys模块中的getrecursionlimit进行获取;

import sys
print(sys.getrecursionlimit())    #1000

也可以进行设置最大致:

sys.setrecursionlimit(8000)

根据电脑内存不同,递归数不同,达到一定程度也会报错,递归越多也会;越占内存;

3.处理递归缓存机制

通过缓存装饰器lru_cache;
一个为函数提供缓存机制的装饰器,缓存maxsize组传入参数,在下次以相同的参数调用时直接返回上一次的结果,用于节约开销或I/O函数的调用时间;
如果maxsize设置为None,缓存数量无上限,


    from functools import lru_cache
    
    @lru_cache(maxsize=128)
    def add(n):
        if n == 1:
            return n
        else:
            sum = n + add(n-1)
            return sum
    
    print(add(1000))

但是执行后依然报错:

以为在执行过程中并没有执行相同的函数;

使用缓存装饰器相同的函数只会开辟一块内存空间,会缓存相同的函数;

@lru_cache(maxsize=128)
def fun1(n):
    if n==1:
        return 1
    elif n==2:
        return 2
    elif n==3:
        return 4
    else:
        return fun1(n-1)+fun1(n-2)+fun1(n-3)


print(fun1(100))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值