Теория чисел
Последовательность Фибоначчи в Python
Научитесь писать программы, использующие последовательность Фибоначчи!
Последовательность Фибоначчи проявляется и проявляется довольно многими способами в математике и информатике/программировании. Цель этой статьи — описать несколько способов, которыми вы можете увидеть появление Фибоначчи, и то, как использовать Python для обнаружения различных аспектов последовательности.
Что такое последовательность Фибоначчи?
Последовательность Фибоначчи — это последовательность натуральных чисел, начинающаяся с 1
. Это выглядит так:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ....
Вы видите образец? N-е число Фибоначчи представляет собой сумму n-1-го и n-2-го чисел Фибоначчи.
Это важный момент, потому что с его помощью можно рекурсивно вычислить многие значения последовательности Фибоначчи. Давайте посмотрим, что мы можем сделать!
Последовательность Фибоначчи — это последовательность натуральных чисел, начинающаяся с
1, 1
, а n-е число Фибоначчи — это сумма двух предыдущих членов.
Создание терминов последовательности Фибоначчи
Давайте сначала посмотрим, как мы можем эффективно генерировать термины Фибоначчи. Самый простой способ — использовать пустой список и цикл for для генерации терминов.
Во-первых, давайте определим наши переменные. Мы определяем a
и b
как первые два термина в последовательности и инициализируем список (с первыми двумя терминами, 1, 1
уже внутри него) с именем series
.
Теперь мы кодируем наш цикл for
. Мы хотим, чтобы он работал в цикле, генерируя n
терминов последовательности Фибоначчи. Для целей этого примера мы установили n = 20
.
Здесь я настроил цикл for в range(2, n)
. Поскольку в этом примере n
равно 20, цикл for повторяется для каждого x в интервале [2,n]. Внутри цикла находится наше определение последовательности Фибоначчи: каждый элемент представляет собой сумму двух предшествующих ему элементов. Наконец, цикл добавляет этот термин в список series
.
Печать series
дает именно то, что мы хотим:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
Нахождение n-го члена
Мы можем найти n-й член, используя код, который мы придумали в предыдущем разделе. Допустим, мы хотим найти i
-й термин (здесь я использую i, потому что n уже является переменной). Для этого примера предположим, что мы хотим найти 200 034 члена последовательности Фибоначчи.
Я просто добавил еще одну переменную, i
, и заменил print(series)
на print(series[i - 1])
. Вот результат:
192373285415866760557173433121516375224056333183434393978124354879532171146744121900663998692213158072140530482128152339686087292623251900269329431030759110518214979329456400212272402706074377403263085149104405417566753948669711296429582649835058544457983707589484754554876558078026664214361845487674198261493554551752199998272364859229929664626978362056289296383617431515020113224233955551537148621593421931721823689908385768027872232929533372485.............................
Обратите внимание, что я поставил длинную линию многоточий после числа. Это связано с тем, что весь результат слишком длинный, чтобы помещать его сюда! Приведенная выше часть составляет всего около 1 % от фактических цифр. Проведя некоторые тесты, оказалось, что печать этого числа заняла 4 секунды, не говоря уже о всем списке.
Нахождение суммы терминов
Теперь мы сделаем еще один шаг и попытаемся найти сумму членов последовательности Фибоначчи до члена n
. Начнем с исходного кода, как всегда:
Теперь нам просто нужно написать еще один цикл for, чтобы найти сумму всех терминов в списке series
. Для этого примера мы допустим n = 300
: сумма первых 300 чисел Фибоначчи. Это должно быть легко:
Мы просто сказали, что для каждого термина в списке series
установите сумму, равную существующей совокупной сумме плюс этот термин. Когда мы запускаем этот код, мы получаем ожидаемый результат:
581811569836004006491505558634099066259034153405766997246569400
Заключительные мысли и заключение
Теперь, когда я рассмотрел все основы последовательности Фибоначчи, позвольте оставить вам несколько вопросов для размышления:
- Попробуйте найти сумму всех нечетных членов до
n = 1000
. - Попробуйте найти сумму всех четных членов до
n = 1000
. - Попробуйте создать инструмент Python для Фибоначчи: пусть пользователь вводит собственные числа
А пока берегите себя и удачного кодирования!