Сегодняшний технический блог посвящен функции Фибоначчи. У меня не было этого в моих технических интервью, но, насколько я понимаю, это общий вопрос. Если временная сложность вашего рекурсивного решения Фибоначчи экспоненциальна, метод сокращения времени, необходимого для запуска этой функции, заключается в использовании мемоизации (это один из способов сделать это).

Оригинальное решение работает медленно из-за повторяющихся вызовов функции Фибоначчи с одинаковыми аргументами.

Функция мемоизации сохраняет аргументы и результаты каждого вызова функции и возвращает предварительно вычисленные результаты. Мы будем извлекать результат из нашего пространства в памяти вместо того, чтобы каждый раз запускать функцию.

Мы объявим функцию и передадим другую функцию fn в качестве аргумента, чтобы ускорить нашу исходную функцию. Мы объявим кеш — объект, который будет хранить наши аргументы с соответствующими результатами. Мы возвращаем нашу функцию с количеством аргументов, с которыми эта функция будет вызываться с помощью … args. Мы рассмотрим объект и его ключи и вернем cache[args], если он существует. Если эта функция с этими конкретными аргументами была вызвана ранее — вернуть ее с результатами, хранящимися в объекте кеша. В противном случае мы вызовем эту функцию с новыми аргументами и кэшируем результаты внутри объекта кеша. Константный результат настроен на вызов нашей исходной функции fn, и мы используем вспомогательную функцию и сохраняем результат в объекте кеша. Наконец, мы возвращаем результат.

функция запоминания (fn) {

константный кеш = {};

функция возврата (…аргументы) {

если (кэш [аргументы]) {

вернуть кеш [аргументы];

}

константный результат = fn.apply(это, аргументы);

кеш[аргументы] = результат;

вернуть результат;

};

}

Я узнал об этом от Стивена Грайдера, который так хорошо все объяснил. Я полагаю, ничто не является ракетостроением, только ракетостроение. Удачного кодирования!