У меня есть следующий алгоритм, который решает задачу суммы подмножества рекурсивно:отображение подмножества в рекурсивном алгоритме подмножества суммы
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 или неионный', чтобы возвращать inc, если inc else noninc'? – vyscond
@vyscond Я все равно получаю ту же ошибку – Bolboa
'append()' изменяет список на месте и возвращает 'None'. –