2017-02-18 3 views
1

вот мой код:Найти наименьшую стоимость поездки на лодке, с помощью рекурсии и запоминанием

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

Что вы ожидаете 'цены (начало, i)' делать? Вы имели в виду 'prices [(start, i)]', как вы делаете в 'make_random_prices'? – jonrsharpe

+0

разве вы не должны использовать 'prices [(start, i)]' вместо цен (start, i)? – Fallen

+0

Сообщение об ошибке само собой разумеется. Вы пытаетесь вызвать объект типа 'dict'. Вы можете видеть, что 'цены' являются' dict', вы определили его как таковые 'prices = {}'. Затем в 'O_C' вы пытаетесь называть его:' prices (start, i) ', но тип' dict' не может быть вызван. –

ответ

0

Эта ошибка объясняет себя довольно хорошо. В следующей строке кода,

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

использования prices[(start, i)] для доступа значение в цен введенные пользователем кортежем (start, i) вместо того, чтобы пытаться вызвать цены по prices(start, i). цены вот дик, а не вызываемый.

Смежные вопросы