【发布时间】:2016-02-01 03:58:26
【问题描述】:
我有以下递归解决子集和问题的算法:
def findSubset(alist, targ, i, sumsofar):
if sumsofar == targ:
return True
if i == len(alist):
return False
inc = findSubset(alist, targ, i+1, sumsofar+alist[i])
noninc = findSubset(alist, targ, i+1, sumsofar)
return inc or noninc
该算法运行良好,但它只给出一个布尔值的答案。所以如果我这样称呼它:
alist = [4, 6, 21, 29, 37, 50]
findSubset(alist, 76, 0, 0)
>>> True
但我希望它返回[4, 6, 29, 37]
这是我改变算法的尝试:
def findSubset(alist, targ, i, sumsofar, new):
if sumsofar == targ:
return new
if i == len(alist):
return []
inc = findSubset(alist, targ, i+1, sumsofar+alist[i], new.append(alist[i]))
noninc = findSubset(alist, targ, i+1, sumsofar, new)
return inc or noninc
在哪里使用它:
alist = [4, 6, 21, 29, 37, 50]
findSubset(alist, 76, 0, 0, [])
>>>AttributeError: 'NoneType' object has no attribute 'append'
我必须做些什么才能让它工作,甚至可能吗?
【问题讨论】:
-
把
return inc or nonionic改成return inc if inc else noninc? -
@vyscond 我仍然遇到同样的错误
-
append()修改列表并返回None。
标签: python recursion subset-sum