Четные числа Фибоначчи (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 немного более круглая, обе функции решают проблему всего за несколько миллисекунд. Я считаю, что для этих технических собеседований решение одной и той же проблемы двумя разными способами на разных языках помогает работодателям увидеть вашу универсальность и креативность. Но самое главное, это демонстрирует вашу способность мыслить логически. Дайте мне знать, если у вас есть отзывы. Спасибо!