簡體   English   中英

遞歸沒有進入基本情況

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM