Отсутствие необходимого кэширования
Анти-паттерн
Рекурсивные функции без кэширования могут выполнять одни и те же вычисления многократно и приводить к экспоненциальной сложности. Без использования специальных инструментов программа может буквально застрять.
Пример¶
Уже при таких цифрах разница в скорости выполнении будет на порядок и больше.
Плохо:
def calculate_fibonacci(num):
if num <= 1:
return num
return calculate_fibonacci(num - 1) + calculate_fibonacci(num - 2)
print(calculate_fibonacci(100))
Хорошо:
import functools
@functools.lru_cache(maxsize=None)
def calculate_fibonacci(num):
if num <= 1:
return num
return calculate_fibonacci(num - 1) + calculate_fibonacci(num - 2)
print(calculate_fibonacci(100))