Найти тему

Задача 147. Числа Фибоначчи

Классическая лёгкая задача для воскресенья.

Условие задачи с сайта acmp.ru
Условие задачи с сайта acmp.ru

Числа Фибоначчи довольно широко используются в спортивном программировании и часто встаёт задача их нахождения (всех или какого-то конкретного), поэтому полезно с самого начала их понять и научиться находить.

Здесь ограничения очень маленькие. Это связано с тем, что числа Фибоначчи растут очень быстро. Для больших номеров их значение приближается к золотому сечению (1.618...) в степени n (с точностью до константы):

Формула n-го числа Фибоначчи
Формула n-го числа Фибоначчи

Поэтому, чтобы не связываться в задаче для начинающих с длинной арифметикой, выбрано ограничение до 30, чтобы ответ помещался в стандартные типы данных.

Самые упорные могут решать эту задачу с помощью 30-ти if-ов, но лучше, всё же использовать цикл. Простым решением было бы завести список, положить в него 0 и 1, потом циклом смотреть в два последних элемента списка и вычислять следующий. Но что делать, если и списки пока неизвестны?

Стоит обратить внимание, что каждый раз нам не нужен весь список, а требуется только пара элементов (но на каждой итерации цикла новая), поэтому можно хранить лишь два последних элемента "виртуального" списка и на каждой итерации цикла обновлять их.

Наиболее читаемый код получается на языке Python, поэтому давайте смотреть:

Решение задачи на языке Python
Решение задачи на языке Python

Если a - это предпоследний элемент списка, а b - последний, то на следующей итерации цикла уже b становится предпоследним (поэтому её значение присваиваем в a), а последним элементом становится сумма. За счёт одновременного присвоения мы можем так записать. В языке С++, например, пришлось бы использовать дополнительную переменную, чтобы сохранить в ней сумму, а только потом сделать присваивание в a.

Однако это не самый быстрый способ вычисления чисел Фибоначчи, но об этом как-нибудь в другой раз, просто знайте)

Предыдущий выпуск: Задача 501. Строение

Я очень хочу, чтобы мои советы были полезны вам, а для того, чтобы быстрее всех получать новые статьи можно подписаться на мой канал.

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц