备忘录使用/缓存存储

2024-06-16 18:38:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个程序,计算两个变量的Pascal身份,硬编码到程序中,因为我对Python还不熟悉,正在尝试缓存和记忆。到目前为止,我掌握的情况如下:

counter = 0

call_cacheK = {}
   def callTest(n, k):
   global counter

   if n in call_cacheK:
       return call_cacheK[n]  
   if k == 0:
       return 1
   elif k == n:
       return 1 
   elif (1 <= k) and (k <= (n-1)):
       counter += 1
       #call_cacheK[n] = result
       result = ((callTest(n-1, k) + callTest(n-1, k-1)))
   print(result)
   return result

callTest(20, 11)
#167,960

我的函数将输出最终的真实答案,它现在有什么,但有很多输出的答案。我似乎不知道如何正确地存储要在缓存中使用的值。你知道吗

如何正确地使用call_cacheK来存储我已经使用过的result值?你知道吗

谢谢你。你知道吗


Tags: 记忆答案程序编码returnifcounter情况
1条回答
网友
1楼 · 发布于 2024-06-16 18:38:27

让我们看看。首先,您有一个包含两个变量的函数,但只通过一个参数将结果存储在缓存中。所以callTest(20, 11)callTest(20, 10)callTest(20, 9)将在缓存中有一个结果。让我们重写一下你的函数:

call_cacheK = {}

def callTest(n, k):
    if (n, k) in call_cacheK:
        return call_cacheK[(n, k)]  
    if k == 0:
        return 1
    elif k == n:
        return 1 
    elif (1 <= k) and (k <= (n-1)):
        result = ((callTest(n-1, k) + callTest(n-1, k-1)))
        call_cacheK[(n, k)] = result
    print(result)
    return result

是的,没有反变量,因为我不知道为什么需要它:)

另外,根据print(result)的用法,您可能使用Python3.x。如果是这样,您可以使用standard cache implementing

from functools import lru_cache

@lru_cache(maxsize=None)
def callTest2(n, k):  
    if k == 0:
        return 1
    elif k == n:
        return 1 
    elif (1 <= k) and (k <= (n-1)):
        result = ((callTest2(n-1, k) + callTest2(n-1, k-1)))
    print(result)
    return result

祝你好运!:)

相关问题 更多 >