我有以下的算法,遞歸解決子集和問題:顯示子集子集和
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'
我必須做些什麼才能使它工作,甚至有可能嗎?
change'return inc或者非離子的'如果還有其他noninc'則返回'inc? – vyscond
@vyscond我還是得到了同樣的錯誤 – Bolboa
'append()'修改了一個列表並返回'None'。 –