【发布时间】:2020-12-21 14:13:18
【问题描述】:
我正在关注动态编程视频。但是,我的代码的记忆不起作用。当我打印(备忘录)它是空白时,它不存储任何真/假。请指教
def cansum(targetsum,numbers):
memo = dict()
print(memo)
# check in memory
if targetsum in memo:
return memo[targetsum]
if targetsum < 0: return False
if targetsum == 0: return True
for number in numbers:
remainder = targetsum - number
if cansum(remainder,numbers) == True:
memo[targetsum] = True
return True
memo[targetsum] = False
return False
print(cansum(7,[2,3])) #True
print(cansum(7,[5,3,4,7])) #True
【问题讨论】:
-
对于初学者来说,每次调用
cansum,memo = dict()这一行都会清除字典.. -
哦,好的,将 memo= dict 移到 def 工作之外。谢谢
-
您没有在递归中将“备忘录”作为参数传递给
cansum()(在视频中就是这样做的,通过用def cansum(targetsum, numbers, memo = {})定义cansum然后执行递归调用为cansum(remainder, numbers, memo)。
标签: python memoization