Получение ошибки ключа в следующем коде, чтобы найти «минимальное число, равное числу»

#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. Спасибо, это решило проблему, теперь она работает отлично.