— — Направления

Выведите n-ю запись ряда Фибоначчи.

Ряд Фибоначчи — это порядок чисел, в котором

каждое число является суммой двух предыдущих.

Например, последовательность

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

формирует первые десять элементов ряда Фибоначчи.

Пример:

выдумка(4) === 3

Во-первых, давайте взглянем на итеративное решение этой проблемы.

Если бы мы просто вернули результат и вызвали нашу функцию fib(4), вывод на консоль выглядел бы так.

Но нам нужно конкретное число в последовательности, поэтому…

Вот и все для итеративного решения. Сложность времени выполнения для этого решения равна O(n) или линейна — это означает, что по мере того, как входное число увеличивается на единицу, увеличивается и объем работы, которую мы должны выполнить в алгоритме.

Вот рекурсивное решение. Сложность выполнения этого решения равна O(2^n) или экспоненциальна, а это означает, что если число, которое мы передаем в fib(n), увеличивается на 1, объем работы, который должен быть выполнен внутри функции, удваивается (или в этом случае, почти вдвое). Это худший сценарий. Скорее всего, на собеседовании вас спросят, как можно ускорить этот алгоритм. Ответ… Мемоизация.

У меня нет времени вдаваться в полноценную дискуссию о мемоизации здесь, но просто чтобы вы знали, что происходит, мы создаем этот объект кеша и сохраняем числа, с которыми вызывается fib(n), как ключи, а также результаты как значения, чтобы не делать ненужных вызовов fib(n). Это резко снижает сложность рекурсивного решения во время выполнения до O(n) или линейного времени.