Четные числа Фибоначчи (Python против JavaScript)

Создание последовательности Фибоначчи в той или иной форме - популярная техническая задача для работодателей на собеседовании. Один из вариантов популярной задачи о числах Фибоначчи - это создание всех четных чисел в последовательности. Здесь я рассмотрю два возможных способа сделать это с помощью Python и JavaScript. Чтобы упростить задачу, мы сгенерируем только четные числа в последовательности ниже 4 000 000, а затем получим сумму всех этих чисел.

Что такое последовательность Фибоначчи?

Каждый новый член в последовательности Фибоначчи генерируется путем добавления двух предыдущих членов. Так, например, начиная с 1 и 2, первые 10 чисел в последовательности будут:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89

Как мы будем генерировать все числа в последовательности?

Мы могли бы начать с размышлений о создании последовательности, сделав что-то вроде этого:

Проблема в том, что мы не можем создать переменную для каждого числа, поэтому лучшее решение - как только мы получим a + b = c, тогда мы захотим сбросить значение каждой из трех переменных. Итак, «a» теперь установлено значение «b», затем «b» установлено значение «c» и т. Д. Это может выглядеть примерно так:

Итак, основная идея заключается в том, что внутри какого-то цикла мы хотим проверить и убедиться, что мы не достигли 4 000 000, затем сбрасываем значения a, b и c, а затем помещаем c в массив или список. Затем мы можем получить сумму этого массива или списка.

Тем не менее, достаточно псевдокода, давайте добавим реальный код и посмотрим, как он будет выглядеть:

Python:

Давайте начнем точно так же, как наш псевдокод. Я буду использовать «x» в качестве пустого массива.

x = []
a = 1
b = 2
c = a + b

Затем мы воспользуемся циклом python while, чтобы проверить и убедиться, что c меньше 4000000..

while c < 4000000:
    a = b
    b = c
    c = a + b
    if c % 2 == 0:
        x.insert(0, c)

Поскольку нас интересуют только четные числа, то внутри цикла while мы проверяем, что это четное число, и только после этого мы вставляем его в x. Далее, мы можем сложить сумму списка и распечатать сумма в питоне.

numSum = (sum(x))
print numSum

JavaScript:

Я хочу решить эту проблему в JavaScript немного иначе, чем в Python. Я собираюсь начать с создания пустого массива, а затем установить значения первых двух индексов в массиве:

var fib = [];
fib[0] = 1;
fib[1] = 2;

Затем я пропущу массив. и сгенерируйте последовательность Фибоначчи, выбрав нужные мне индексы. В предыдущем примере мы продолжали переустанавливать значения a, b и c каждый раз, когда проходили через массив. Но в этой версии я не собираюсь сбрасывать какие-либо значения, а вместо этого сделаю что-то вроде этого, где я беру fib [i] и устанавливаю его равным значению fib [i-2] + fib [i-1] , а затем поместите значение fib [i] в ​​массив.

for(i=2; i<=50; i++) {
  fib[i] = fib[i-2] + fib[i-1];
  fib.push(fib[i]);
}

На данный момент у меня есть вся последовательность Фибоначчи, а не только четные, поэтому я воспользуюсь вторым циклом for, чтобы получить индексы массива, которые меньше 4 000 000, а также четные.

arrUnder4mil = [];
for (var i = 0; i < fib.length; i++) {
  if (fib[i] <= 4000000 && fib[i] %2 == 0) {
    arrUnder4mil.push(fib[i]);
  }
}

Наконец, я получу сумму всех чисел в массиве и запишу результат.

let fibSum = arrUnder4mil.reduce((a, b) => a + b, 0);
console.log(fibSum);

Заключение:

Хотя наша функция JavaScript немного более круглая, обе функции решают проблему всего за несколько миллисекунд. Я считаю, что для этих технических собеседований решение одной и той же проблемы двумя разными способами на разных языках помогает работодателям увидеть вашу универсальность и креативность. Но самое главное, это демонстрирует вашу способность мыслить логически. Дайте мне знать, если у вас есть отзывы. Спасибо!