Числа Фибоначчи на языке Python

Числа Фибоначчи — это ряд чисел, в котором каждое следующее число равно сумме двух предыдущих.

1, 1, 2, 3, 5, 8, 13, ...
Числа Фибоначчи на языке программирования Python
#
×

Иногда ряд начинают с нуля.

0, 1, 1, 2, 3, 5, 8, ...

В данном случае мы будем придерживаться первого варианта.

Формула и пример вычисления чисел ряда Фибоначчи

Задачи по программированию на числа Фибоначчи могут быть разными. В одних случаях может требоваться вывести N-ное количество элементов ряда, в других — просто найти значение n-го элемента. Также может быть вариант, когда надо вывести ряд до заданного числового предела и/или найти количество элементов в нем.

Кроме этого, задачу можно решить разными способами. Так в языке Python числа Фибоначчи можно вычислять, как используя циклы for или while, так и рекурсией. Ниже приводятся различные способы решения немного разных задач на числа Фибоначчи с помощью циклов.

Вычисление n-го числа ряда Фибоначчи циклом while

Присвоим переменным fib1 и fib2 значения двух первых элементов ряда, то есть единицы.

Получим от пользователя номер элемента, значение которого требуется вычислить. Присвоим номер элемента переменной n.

Поскольку значения первых двух элементов ряда Фибоначчи нам уже известны и вычисления начинаем с третьего, количество проходов по телу цикла должно быть на 2 меньше значения n, то есть n - 2.

Если пользователь вводит 1 или 2, тело цикла ни разу не выполняется, на экран выводится исходное значение fib2.

В теле цикла надо выполнять следующие действия:

  1. Сложить fib1 и fib2, присвоив результат переменной для временного хранения данных, например, fib_sum.
  2. Переменной fib1 присвоить значение fib2.
  3. Переменной fib2 присвоить значение fib_sum.

После окончания работы цикла вывести значение fib2 на экран.

fib1 = 1
fib2 = 1

n = input('Номер элемента ряда Фибоначчи: ')
n = int(n)

i = 0
while i < n - 2:
    fib_sum = fib1 + fib2
    fib1 = fib2
    fib2 = fib_sum
    i = i + 1

print('Значение этого элемента:', fib2)

Пример выполнения программы:

Номер элемента ряда Фибоначчи: 10
Значение этого элемента: 55

Компактный вариант кода:

fib1 = fib2 = 1

n = input('Номер элемента ряда Фибоначчи: ')
n = int(n) - 2

while n > 0:
    fib1, fib2 = fib2, fib1 + fib2
    n -= 1

print('Значение этого элемента:', fib2)

Вывод ряда чисел Фибоначчи с помощью цикла for

В данном случае выводится не только значение искомого элемента ряда Фибоначчи, но и все числа до него включительно. Для этого вывод значения fib2 помещен в цикл (так можно было сделать и в варианте с циклом while).

fib1 = fib2 = 1

n = int(input())

print(fib1, fib2, end=' ')

for i in range(2, n):
    fib1, fib2 = fib2, fib1 + fib2
    print(fib2, end=' ')

Пример выполнения:

10
1 1 2 3 5 8 13 21 34 55

Ряд Фибоначчи до заданного числового предела

Если по условию задачи требуется вывести ряд Фибоначчи так, чтобы значение последнего элемента не превышало определенного числа (которое может вводиться с клавиатуры), то количество повторов цикла нам неизвестно, а условием его выполнения будет значение последнего вычисленного числа Фибоначчи не превышающее установленного предела. Это значит, мы не можем использовать цикл for, и задача решается с помощью while.

fib1 = fib2 = 1

limit = int(input('Введите числовой предел: '))

if limit > 1:
    print(fib1, end=' ')
    while fib2 < limit:
        print(fib2, end=' ')
        fib1, fib2 = fib2, fib1 + fib2
Введите числовой предел: 233
1 1 2 3 5 8 13 21 34 55 89 144

Задача может быть усложнена, если также требуется посчитать количество элементов ряда Фибоначчи, значение которых меньше числового предела. В этом случае следует ввести дополнительную переменную, в которую будет записываться количество повторов цикла.

fib1 = fib2 = 1
n = 1

limit = int(input('Введите числовой предел (больше 0): '))

print(fib1, end=' ')
while fib2 < limit:
    print(fib2, end=' ')
    fib1, fib2 = fib2, fib1 + fib2
    n += 1

print('\nКоличество элементов ряда:', n)
Введите числовой предел (больше 0): 100
1 1 2 3 5 8 13 21 34 55 89
Количество элементов ряда: 11