Вчера всё же получилось похоже написать рекурсию. Два вопроса: 1. @cache надо писать непосредственно перед кешируемой функцией? Он запоминает только её, а не всё подряд? А то сначала выдавало ошибку, написал в произвольном месте просто вверху. 2. Как определить значение, по которому выходить из рекурсии? Я сделал по-другому, но ответ приняло. Решение ниже: def numSquares(self, n: int) -> int: ps = tuple(el**2 for el in range(int(n**0.5), 0, -1)) @cache def helper(current_sum): if current_sum in ps: return 1 else: return min(1 + helper(current_sum - el) for el in ps if el
@cache ставится непосредственно над именем функции или метода. @cache def helper(n): result = ... return result тоже что и cache = {} def helper(n): if n in chache: return cache[n] result = ... cache[n] = result return result
Второе решение через set понравилось, спасибо, что поделился. 👍
Вчера всё же получилось похоже написать рекурсию. Два вопроса:
1. @cache надо писать непосредственно перед кешируемой функцией? Он запоминает только её, а не всё подряд? А то сначала выдавало ошибку, написал в произвольном месте просто вверху.
2. Как определить значение, по которому выходить из рекурсии? Я сделал по-другому, но ответ приняло. Решение ниже:
def numSquares(self, n: int) -> int:
ps = tuple(el**2 for el in range(int(n**0.5), 0, -1))
@cache
def helper(current_sum):
if current_sum in ps:
return 1
else:
return min(1 + helper(current_sum - el) for el in ps if el
@cache ставится непосредственно над именем функции или метода.
@cache
def helper(n):
result = ...
return result
тоже что и
cache = {}
def helper(n):
if n in chache:
return cache[n]
result = ...
cache[n] = result
return result
По 2 ) все индивидуально. надо смотреть и задаче чтобы не ушло в бесконечную рекурсию