#python #recursion #data-structures #dynamic-programming #memoization
Вопрос:
Я получаю ошибку в следующем коде для вышеуказанной проблемы с использованием запоминания, пожалуйста, помогите мне найти ошибку и исправить код.
import sys
#sys.setrecursionlimit(10**5)
import math
cache={}
def m(n):
if n==0:
return 0
ans=sys.maxsize
root=int(math.sqrt(n))
for i in range(1,root 1):
nc=n-(i**2)
if cache[nc] not in cache:
sa=m(nc)
cache[nc]=sa
curr=1 sa
else:
curr=1 cache[nc]
ans=min(ans,curr)
return ans
print(m(int(input())))
Комментарии:
1. И ошибка в том, что…?
2. Я получаю ключевую ошибку
3. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.
Ответ №1:
Было бы полезно, если бы вы предоставили полный вывод ошибок, который должен включать номер строки и окружающий код. Однако я подозреваю, что проблема заключается в следующей строке:
if cache[nc] not in cache:
Вы проверяете, существует ли значение ключа словаря в качестве ключа словаря. Я предполагаю, что вы на самом деле имели в виду это (что позволит проверить, является ли значение существующим ключом словаря):
if nc not in cache:
Комментарии:
1. Спасибо, это решило проблему, теперь она работает отлично.