Базовая рекурсивная версия работает для небольших входных данных, но при $N > 35$ она становится чрезвычайно медленной из-за избыточных вычислений. Я знаю, что могу использовать Мемоизацию для оптимизации этого, но я хочу, чтобы основная логика моего алгоритма была «чистой», не смешивая логику кэширования с логикой вычислений.
Проведенные мной исследования:
- Я обнаружил, что functools.lru_cache существует в Python и прекрасно решает проблему.
- Однако в образовательных целях я хочу реализовать свой собственный Декоратор, чтобы понять лежащий в его основе Архитектурный шаблон.
- Я видел примеры декораторов функций, но меня смущает, как они обрабатывают область словаря memo при нескольких рекурсивных вызовах.
Код: Выделить всё
def count_stairs(n):
# Base cases
if n