Чтобы начать последовательность Фибоначчи, это последовательность чисел, начинающаяся с 0 и 1, затем каждое число после этого получается путем сложения двух предыдущих чисел. Эта последовательность чисел бесконечна, но вот первые 10 чисел последовательности для примера:
0,1,1,2,3,5,8,13,21,34......
Исходя из этого, то, что нам нужно решить или что нас могут попросить решить на собеседовании по кодированию, - это написать функцию, которая возвращает вам n-е число в последовательности Фибоначчи. Большинство из этих проблем алгоритмов, с которыми вы могли столкнуться на собеседовании по кодированию, были решены несколькими способами, одни более эффективно, чем другие.
Для этого примера я напишу в JavaScript два способа решения этой проблемы: базовое итеративное решение с циклом for и рекурсивное решение. Во-первых, ниже приведен код итеративного решения:
function fibonacci(n){ let fibArray = [0,1] for (let i=2; i < n + 1; i++) { fibArray.push(fibArray[i-2] + fibArray[i-1]) } return fibArray[n] }
Начнем с создания массива и помещения в него первых двух чисел. Затем, используя цикл for, мы добавляем предыдущее число и число два перед текущей точкой в массиве и помещаем эту сумму в конец массива. Этот цикл продолжается до тех пор, пока вход n + 1 не станет равным i, которое начинается с 2. Затем наш оператор return берет из созданного нами массива n-е число. Это работает и не является плохим решением, поскольку его временная сложность Big O равна O (n), поскольку он проходит через цикл for.
Следующее решение с использованием рекурсии - хороший пример, чтобы увидеть, как работает рекурсия, или изучить рекурсию. Ниже приведен код рекурсивного решения:
function fibonacci(n) { if (n < 2) { return n } return fibonacci(n-1) + fibonacci(n-2) }
Код этого решения кажется коротким и простым. Однако это не очень практично, так как имеет временную сложность Big O, равную O (2 ^ n), что плохо и не то, чего вы хотите достичь. С увеличением n временная сложность растет экспоненциально из-за экспоненциального увеличения количества вызовов функций. Для каждого числа n больше 2 мы делаем еще два вызова функций.
Курс Udemy Учебный курс с собеседованием по кодированию: алгоритмы + структуры данных предлагает несколько решений этой проблемы.