[英]Recursion not entering base case
當我運行這個程序時,我得到索引超出范圍錯誤。 我做錯了什么,為什么它不起作用
def knapsack(p, w, capacity, idx):
if capacity <= 0 or 0 > idx >= len(p):
return 0
profit_1 = 0
if w[idx] <= capacity:
profit_1 = p[idx] + knapsack(p, w, capacity - w[idx], idx + 1)
profit_2 = knapsack(p, w, capacity, idx + 1)
return max(profit_1, profit_2)
p = [31, 26, 72, 17]
w = [3, 1 , 5, 2]
print(knapsack(p, w, 7, 0))
它沒有進入基本情況
錯誤
Traceback (most recent call last):
File "C:/Users/komat/PycharmProjects/DSA/divide&conquer/knapsack.py", line 14, in <module>
print(knapsack(p, w, 7, 0))
File "C:/Users/komat/PycharmProjects/DSA/divide&conquer/knapsack.py", line 6, in knapsack
profit_1 = p[idx] + knapsack(p, w, capacity - w[idx], idx + 1)
File "C:/Users/komat/PycharmProjects/DSA/divide&conquer/knapsack.py", line 6, in knapsack
profit_1 = p[idx] + knapsack(p, w, capacity - w[idx], idx + 1)
File "C:/Users/komat/PycharmProjects/DSA/divide&conquer/knapsack.py", line 7, in knapsack
profit_2 = knapsack(p, w, capacity, idx + 1)
File "C:/Users/komat/PycharmProjects/DSA/divide&conquer/knapsack.py", line 6, in knapsack
profit_1 = p[idx] + knapsack(p, w, capacity - w[idx], idx + 1)
File "C:/Users/komat/PycharmProjects/DSA/divide&conquer/knapsack.py", line 5, in knapsack
if w[idx] <= capacity:
IndexError: list index out of range
你正在做 idx + 1 行中的profit_1 = p[idx] + knapsack(p, w, capacity - w[idx], idx + 1)
。 在某些迭代中,idx 變為 3,而 idx + 1 變為 4。但是數組的長度是 4,索引 4 將不起作用,因為索引從 0 開始到 3 結束。因此它與 IndexError 中斷。
嘗試添加print (p, w, capacity, idx)
作為函數 def 的第一行,你就會知道它在哪里中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.