找到最低的乘船成本,使用递归和记忆

时间:2017-02-18 10:23:13

标签: python python-2.7 recursion grid memoization

那是我的代码:

def O_C(n, prices, start=1, memo=None):
    if start == n:
        return 0
    if memo is None:
        memo = {}
    if start not in memo:
        options = []
        for i in range(start + 1, n + 1):
            options.append(prices(start, i) + O_C(n, prices, i, memo))
        memo[start] = min(options)
    return memo[start]

# O_C stands for Optimal Cost

def make_random_prices(N):
    import random
    prices = {}
    for i in range(1, N + 1):
        for j in range(i + 1, N + 1):
            prices[(i, j)] = random.randint(1, 10*N)
    return prices

prices = make_random_prices(100)
print O_C(100, prices)

我不断得到的错误:

Traceback (most recent call last):
  File "/Users/Ori/Desktop/OneDrive - mail.tau.ac.il/Python/test/recursion.py", line 48, in <module>
    print O_C(100, prices)
  File "/Users/Ori/Desktop/OneDrive - mail.tau.ac.il/Python/test/recursion.py", line 32, in O_C
    options.append(prices(start, i) + O_C(n, prices, i, memo))
TypeError: 'dict' object is not callable

在此上下文中找不到此站点或任何其他此类错误的任何引用。 递归调用可能是错误的?

1 个答案:

答案 0 :(得分:0)

这个错误解释得非常好。在以下代码行中,

options.append(prices(start, i) + O_C(n, prices, i, memo))

使用prices[(start, i)]访问由元组(start, i)键入的价格中的值,而不是尝试按prices(start, i)调用价格价格这是一个字典,而不是可调用的。