我的背包代码在python 3中不起作用有人能帮助我的代码有什么问题吗?

bogh5gae  于 2023-01-01  发布在  Python
关注(0)|答案(1)|浏览(178)
def knapSack(W, wi, pi, i):
    
    if i == 0 or W == 0:
        return 0

    if (wi[i-1] > W):
        return knapSack(W, wi, pi, i-1)

    else:
        return max(
            pi[n-1] + knapSack(
                W-wi[n-1], wi, pi, n-1),
            knapSack(W, wi, pi, n-1))

pi = [25, 5, 20, 120, 100, 0, 30, 0, 0, 75, 100]
wi = [2, 4, 1, 8, 10, 5, 3, 7, 6, 12, 7]
W = 30
n = len(pi)
knapSack(W, wi, pi, n)

我期望函数的结果在最后出现,但是我一直得到错误。我得到(超过最大递归深度)错误,但是我不认为这是问题所在。

w8ntj3qf

w8ntj3qf1#

knappSack()函数的参数为i,但在该函数中,您仍然使用n,它在递归中保持不变。

def knapSack(W, wi, pi, i):
    
    if i == 0 or W == 0:
        return 0

    if (wi[i-1] > W):
        return knapSack(W, wi, pi, i-1)

    else:
        return max(
            pi[i-1] + knapSack(W-wi[i-1], wi, pi, i-1),
            knapSack(W, wi, pi, i-1))

pi = [25, 5, 20, 120, 100, 0, 30, 0, 0, 75, 100]
wi = [2, 4, 1, 8, 10, 5, 3, 7, 6, 12, 7]
W = 30
n = len(pi)
knapSack(W, wi, pi, n)

应该能解决问题。

相关问题