我是Python的新手,所以也許它可能是一個愚蠢的問題。遞歸函數不返回創建的字符串
我已經實現了一個簡單的遞歸揹包解決方案,最終返回一個位序列。但有時它不會返回生成的序列。這是我的代碼及其對不同輸入的結果。
def knapsackRecursive(items, maxNum, bestResponse):
print('items=' + str(items) + ', maxNum=' + str(maxNum))
referenceIndex = 0
editableMaxNum = maxNum
if editableMaxNum == 0:
bestResponse = '0'
else:
for i in reversed(items):
item = int(i)
if editableMaxNum >= item:
if referenceIndex == 0:
referenceIndex = items.index(str(item))
editableMaxNum -= item
bestResponse = '1' + bestResponse
else:
bestResponse = '0' + bestResponse
if editableMaxNum != 0:
bestResponse = ''
if referenceIndex != 0:
for k in range(0, len(items) - referenceIndex):
bestResponse = '0' + bestResponse
knapsackRecursive(items[:referenceIndex], maxNum, bestResponse)
else:
bestResponse = '0'
print('bestResponse=' + str(bestResponse))
return bestResponse
Items
是其是常數[ '1', '2', '4', '10', '20', '40', '63', '105'。最初bestResponse
是空字符串。
如果我設置maxNum
如41,輸出爲:
items=['1', '2', '4', '10', '20', '40', '63', '105'], maxNum=41
bestResponse=10000100
但是,如果我設置maxNum
如71,輸出爲:
items=['1', '2', '4', '10', '20', '40', '63', '105'], maxNum=71
items=['1', '2', '4', '10', '20', '40'], maxNum=71
bestResponse=10011100
bestResponse=00
爲什麼打印兩次輸入71 bestResponse
輸出?儘管第一次打印是正確的,但爲什麼函數返回錯誤的第二個結果呢?
編輯
我已經改變了knapsackRecursive(items[:referenceIndex], maxNum, bestResponse)
爲return knapsackRecursive(items[:referenceIndex], maxNum, bestResponse)
。它似乎解決了。很明顯,我在使用遞歸時犯了一個錯誤。但我仍然不明白,爲什麼函數返回第一次調用的結果,而不是第二次調用,而第二次調用預計會產生正確的響應。