(2 разных решения в JavaScript)
Последовательность Фибоначчи определяется следующим образом: первое число последовательности — 0
, второе число — 1
, а n
е число — это сумма (n - 1)
-го и (n - 2)
-го чисел. Напишите функцию, которая принимает целое число n
и возвращает n
число Фибоначчи.
Первые несколько чисел последовательности Фибоначчи: 0, 1, 1, 2, 3, 5, 8..
Мы собираемся использовать нулевую индексацию для серии.
// Input: n = 0 // Expected output: 0 // Input: n = 2 // Expected output: 1 // Input: n = 6 // Expected output: 8
Решение №1
Во-первых, давайте создадим функцию fibonacci
. Если n
меньше 2, функция должна вернуть n
.
function fibonacci(num) { // if num is 0 or 1, return itself if (num < 2) { return num; } }
Чтобы сохранить значения двух предыдущих чисел, давайте создадим переменную.
function fibonacci(num) { if (num < 2) { return num; } // create a variable to store last 2 numbers let lastTwo = [0, 1]; }
При переборе всех чисел до заданного n
функция должна вычислить сумму последних 2 чисел и переназначить значения переменной.
function fibonacci(num) { if (num < 2) { return num; } let lastTwo = [0, 1]; // iterate through all the numbers less than (num - 1) for (let i = 0; i < num - 1; ++i) { // calculate a sum of last 2 numbers const sum = lastTwo[0] + lastTwo[1]; // reassign new values to last 2 numbers lastTwo = [lastTwo[1], sum]; } }
Наконец, верните последнее число из переменной lastTwo
.
function fibonacci(num) { if (num < 2) { return num; } let lastTwo = [0, 1]; for (let i = 0; i < num - 1; ++i) { const sum = lastTwo[0] + lastTwo[1]; lastTwo = [lastTwo[1], sum]; // return last number return lastTwo[1]; } }
Решение №2. Рекурсивный
Рекурсивное решение короче. Первый шаг такой же. Если n
меньше 2, функция должна вернуть n
.
function fibonacci(num) { // if num is 0 or 1, return itself if (num < 2) { return num; } }
После этого функция должна вернуть сумму 2 fibonacci
функций, вызванных рекурсивно с (n - 1)
и (n - 2)
параметрами.
function fibonacci(num) { if (num < 2) { return num; } // calculate each of two last n's separately with recursion and make a sum return fibonacci(n - 1) + fibonacci(n - 2); }
Вы можете узнать больше о рекурсивных функциях по ссылке ниже: