【发布时间】:2013-01-18 15:10:58
【问题描述】:
为了家庭作业,我为子集总和编写了一个递归函数,但我找不到字典的正确键,我一直收到键错误。 不是在寻找解决方案,只是可以帮助我理解磨损的解释:
def subset_sum(s, numbers):
memo={}
return subset_sum_memo(s, numbers, 1, memo)
def subset_sum_memo(s, numbers, i, memo):
key= (len(numbers))
if key not in memo:
if s==0:
memo[key]= True
elif s<0 or numbers==[]:
memo[key]= False
for n in range(len(numbers)):
if subset_sum_memo(s - numbers[n], numbers[:n] + numbers[n+1:], n, memo):
memo[key]= True
return memo[key]
我得到的错误是:
if subset_sum_memo(s - numbers[n], numbers[:n] + numbers[n+1:], n, memo):
File "C:\Users\Yarden\Desktop\Python\302154513_ex11_q1.py", line 17, in subset_sum_memo return memo[key] KeyError: 6
更新 1
这是我的新代码:
def subset_sum(s, numbers):
memo={}
return subset_sum_memo(s, numbers, 1, memo)
def subset_sum_memo(s, numbers, i, memo):
key= (len(numbers))
if s==0:
memo[key]= True
if s<0 or numbers==[]:
memo[key]= False
if key not in memo:
for n in range(len(numbers)):
if subset_sum_memo(s - numbers[n], numbers[:n] + numbers[n+1:], n, memo):
memo[key]= True
else:
memo[key]=False
return memo[key]
还是有问题,不知道为什么
【问题讨论】:
-
错误说明了什么?可以发一下吗?
-
如果 subset_sum_memo(s - numbers[n], numbers[:n] + numbers[n+1:], n, memo): 文件 "C:\Users\Yarden\Desktop\Python\ 302154513_ex11_q1.py",第 17 行,在 subset_sum_memo 返回 memo[key] KeyError: 6
-
在您的 for 循环中,有时
memo[key]未设置,因为它受 if 语句的限制。在这些情况下,当您尝试在 return 语句中访问memo[key]时会收到 KeyError。 -
顺便说一句,Python 中的记忆需要一个装饰器。 code.activestate.com/recipes/…
标签: python recursion sum subset memoization