Python 回忆录在换币问题中的应用

Python 回忆录在换币问题中的应用,python,algorithm,dynamic-programming,memoization,Python,Algorithm,Dynamic Programming,Memoization,我正在尝试解决以下问题(从): 我想我应该利用以下递归关系:在这个例子中,使用面额(1,2,5)生成7的方法数是使用面额(2,5)生成0,1,…,7的方法数之和(也就是说,对于第一枚硬币编号的每种选择,1),递归调用一组较小的面额) 为了应用memonization,我想我应该使用。以下是我目前的解决方案(包括pytest单元测试): 如果我考虑函数调用,那么我希望有一个调用“存储”,因为调用(1, 2, 5),5 < /代码>,将导致(2, 5),5 < /> >,>代码>(2, 5),4

我正在尝试解决以下问题(从):

我想我应该利用以下递归关系:在这个例子中,使用面额
(1,2,5)
生成7的方法数是使用面额
(2,5)
生成
0,1,…,7
的方法数之和(也就是说,对于第一枚硬币编号的每种选择,
1
),递归调用一组较小的面额)

为了应用memonization,我想我应该使用。以下是我目前的解决方案(包括
pytest
单元测试):

如果我考虑函数调用,那么我希望有一个调用“存储”,因为调用<代码>(1, 2, 5),5 < /代码>,将导致<代码>(2, 5),5 < /> >,>代码>(2, 5),4 < /代码>,<代码>(2, 5),3 < /代码>,<代码>(2, 5),2 < /代码>,<代码>(2, 5),1 < /代码>,和<代码>(2, 5),0。其中的第一个和第三个在某个点上应依次导致
(5,),3
,其中一个点可以使用缓存的结果


简言之,为什么此回忆录应用程序不起作用?

lru\U缓存
是一个lru缓存。与中一样,当缓存已满且需要插入新元素时,它会逐出最近使用最少的元素。默认缓存大小为128。您的回忆录结果将被逐出

设置
maxsize=None
以使用无边界、非LRU缓存:

@lru_cache(maxsize=None)
def ...

什么是非moized运行时?很好!这将
测试的运行时间减少到0.13s\u big\u amount
coin_changing.py ........                                                [100%]

=========================== slowest 1 test durations ===========================
10.31s call     coin_changing.py::test_big_amount
========================== 8 passed in 10.35 seconds ===========================
@lru_cache(maxsize=None)
def ...