我們需要返回項目的最大值以及組成該最大值的項目。顯示揹包python遞歸的最大值和項目
列表輸入格式爲[[weight1, value1], [weight2, value2]]
。
用下面的代碼,我只返回最大值。
請問有人可以幫我把這個價值與物品一起退回嗎?
def knapsack(capacity, itemList):
"""
Returns the maximum value and the list of items to keep.
"""
if len(itemList) == 0:
return 0
elif itemList[-1][0] > capacity:
return knapsack(capacity, itemList[:-1])
else:
return max(
knapsack(capacity, itemList[:-1]),
knapsack(capacity-itemList[-1][0], itemList[:-1]) + itemList[-1][1])
print (knapsack(6, [[1, 4], [5, 150], [4, 180]]))
# should return [184, [[1, 4], [4, 180]]]
# returns 184
將另一個參數添加到fnc:'knapsack(capacity,itemList,result_items = [])''。在您的fnc中相應地添加項目並將列表傳遞給遞歸調用。 – schwobaseggl
@schwobaseggl **不使用'[]'**這是一個可變類型,如果函數被再次調用,它將保留值。相反,你可以使用'result_items = None'並且實例化一個新的列表。 –
@o_o真的,注意! – schwobaseggl