1.递归的一种优化方法:缓存优化(减少重复计算),以斐波那契数列为例

计算斐波那契数列
Python 代码:

def fibonacci(n):
    if n == 0:  # 终止条件
        return 0
    if n == 1:  # 终止条件
        return 1
    return fibonacci(n - 1) + fibonacci(n - 2)  # 递归调用

递归过程示意

fibonacci(5)
= fibonacci(4) + fibonacci(3)
= (fibonacci(3) + fibonacci(2)) + (fibonacci(2) + fibonacci(1))
= ((fibonacci(2) + fibonacci(1)) + fibonacci(2)) + (fibonacci(2) + 1)
= (((fibonacci(1) + fibonacci(0)) + fibonacci(1)) + fibonacci(2)) + (fibonacci(2) + 1)
= (((1 + 0) + 1) + fibonacci(2)) + (fibonacci(2) + 1)
= (((1 + 0) + 1) + ((1 + 0) + 1)) + (((1 + 0) + 1) + 1)
= 5

缺点:重复计算! 可以用 缓存优化
缓存优化(减少重复计算)
斐波那契数列 的递归会重复计算很多次,可以使用 缓存 来优化:

from functools import lru_cache

@lru_cache(None)  # 自动缓存计算结果
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(50))  # 只需几毫秒!

优化效果: