Комментарии 10
Чтобы это работало, аргументы функции должны быть хэшируемыми (неизменяемыми)
Нет. Аргументы функции могут быть какими угодно. Хэшируемыми должны быть ключи кэша.
if n in cache:
return cache[n]
Здесь поиск по ключу вызывается два раза. Лучше использовать cache.get()
Кстати, убивают меня такие размазанные фразы типа "должны быть хэшируемыми (неизменяемыми)". Так хэшируемыми или неизменяемыми? Или это одно и то же? А вы точно уверены, что объекты некого типа не могут быть изменяемые, но хэшируемые (или наоборот, неизменяемые, но не хэшируемые? Я вот уверен, что могут и легко.
Почему функции работают долго?
Обычно это происходит по трем причинам:3) Рекурсия — когда функция вызывает саму себя.
Нет, рекурсия не является причиной проблемы
И рекурсивный код и нерекурсивный могут работать одинаково долго просто потому что код так написан (с ошибками или намеренно для упрощения реализации).
Неужели нельзя приводить менее одиозные примеры? Реализация fib в примере имеет экспоненциальную сложность, и это при живом несложном алгоритме, работающим за логарифм
Хотелось бы конечно инвалидацию кэша
Как здесь https://mol.hyoo.ru/#!section=docs/=qxmh6t_sinbmb
Тогда это стало бы применимо почти для всего
В современном программировании память стоит дешево
Уже неактуально )) В современном мире память резко подорожала
"программист из казахстана коммунист" очередной ии пост

Мемоизация в Python: как заставить код помнить