Pull to refresh

Comments 10

UFO landed and left these words here

Чтобы это работало, аргументы функции должны быть хэшируемыми (неизменяемыми)

Нет. Аргументы функции могут быть какими угодно. Хэшируемыми должны быть ключи кэша.

if n in cache:

return cache[n]

Здесь поиск по ключу вызывается два раза. Лучше использовать cache.get()

Кстати, убивают меня такие размазанные фразы типа "должны быть хэшируемыми (неизменяемыми)". Так хэшируемыми или неизменяемыми? Или это одно и то же? А вы точно уверены, что объекты некого типа не могут быть изменяемые, но хэшируемые (или наоборот, неизменяемые, но не хэшируемые? Я вот уверен, что могут и легко.

Классический пример: кортеж (сам по себе неизменяемый), который содержит изменяемый/нехэшируемый элемент.​Например, (1, [2, 3]) — кортеж нельзя “поменять” как кортеж, но внутри лежит список, и поэтому такой кортеж не хэшируется.

Да почему нет? Не меняйте список и все дела.

Почему функции работают долго?
Обычно это происходит по трем причинам:

3) Рекурсия — когда функция вызывает саму себя.

Нет, рекурсия не является причиной проблемы

И рекурсивный код и нерекурсивный могут работать одинаково долго просто потому что код так написан (с ошибками или намеренно для упрощения реализации).

Неужели нельзя приводить менее одиозные примеры? Реализация fib в примере имеет экспоненциальную сложность, и это при живом несложном алгоритме, работающим за логарифм

 В современном программировании память стоит дешево

Уже неактуально )) В современном мире память резко подорожала

"программист из казахстана коммунист" очередной ии пост

Sign up to leave a comment.

Articles