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))