Здравствуйте!
Вчера мы с вами говорили о REST, API и Django REST framework. Сегодня поговорим о самом частом задании на собеседованиях на позицию программиста — вычисление ряда Фибоначчи длинной в n.
Для тех, кто не знает, ряд Фибоначчи это
элементы числовой последовательности, в которой первые два числа равны либо 1 и 1, либо 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел
Спасибо, Википедия.
На собеседовании интервьюер просит вас составить такую функцию, которая бы при её вызове, например fib(n), возвращала бы ряд Фибоначчи из n чисел. Как же справиться с этой задачей?
Вот её решение:
Чтобы не просто копировать её и заучивать, давайте разберёмся как она работает:
В первой строке мы определяем функцию, которая принимает один аргумент(число), во второй строке заводим пустой список, чтобы складывать в него результаты наших вычислений(ряд Фибоначчи). В третьей строке задаём значения двум переменным а = 0, b = 1, где "а" будет обозначать число ряда Фибоначчи, а "b" —сумму "а" и следующего за ним числа.
Итак, в строке с номером 4 мы определяем цикл while, который будет работать до тех пор, пока "n", которое дано, как аргумент фунции не будет равно нулю. После чего в 5-й строке мы "складываем" наше первое число ряда Фибоначчи в наш список result, так как первым у нас будет 0. В 6-й строке наше число n, которое мы передали функции в виде аргумента, становится меньше на 1, так как 1 элемент в 5-й строке мы уже в список result положили. В 7-й строке, "a" у нас становится равно "b", то есть следующему числу в ряде Фибоначчи, а "b" будет равно сумме "a" и "b", в нашем случае 1, то есть следующему числу после "а" в ряде Фибоначчи. Таким образом цикл повторяется до n != 0, а мы получаем наш ряд Фибоначчи из n чисел в 8 строке по окончании цикла.
Вуаля! Задача решена.
Но бывает, что рекрутёры могут усложнить задачу и попросят вас составить функцию, где будут только чётные числа ряда Фибоначчи, либо нечетные. Легче лёгкого, мы делаем следующее:
В случае чётных чисел. И следующее:
В случае нечётных чисел.
Что изменилось, по сравнению с первым вариантом?
Правильно, мы перед тем как "сложить" "а" в результирующий список, проводим его деление по модулю, и если остаток от деления есть, то собираем нечётные числа, а если нет — чётные.
Зачем всё это? Ведь это всё есть в интернете. Ну, во-первых, в интернете есть вообще всё, а, во-вторых, и в главных — когда вы находите где-то решение своей задачи, не просто "ctrl-c" и "ctrl-v", а разбирайтесь, как в этом решении всё устроено. В противном случае, найденное решение не принесёт вам пользы, вы просто спишете его, как хулиган у отличника в школе, и толку для хулигана в этом нет никакого.
До завтра и приятного вам обучения. Завтра скорее всего поговорим о том, как лучше учить английский язык, если вы его совсем не знаете.
Если понравилась сегодняшняя статья, поставьте, пожалуйста, лайк, а если вы ещё не с нами, подпишитесь на канал, чтобы ничего не пропустить.
Предыдущая статья. ................................................................... Следующая статья.