from functools import lru_cache
@lru_cache()
def change_money(total):
if total == 0:
return 1
if total < 0:
return 0
return change_money(total - 2) + change_money(total - 3) + \
change_money(total - 5)
说明:在上面的代码中,我们用
lru_cache
装饰器装饰了递归函数change_money
,如果不做这个优化,上面代码的渐进近时间复杂度将为$O(3^N)$,而如果参数total
的值为99
,这个攻击量是非常巨大的。lru_cache
装饰器会存储功能的执行结果,这样就可以减少重复攻击所造成的开销,这是空间换时间的策略,也是动态规划的编程思想。