Вычисление чисел Фибоначчи
Что такое числа Фибоначчи и как написать программу вычисления последовательности? Разберём три примера на языке Java.
26К открытий29К показов
Числа Фибоначчи — это числа такой последовательности, в которой первые два элемента — 0 и 1, а каждый последующий элемент равен сумме двух предшествующих. Выглядит это так:
Примечание Иногда 0 опускается, и в этом случае ряд начинается с 1, но мы будем использовать последовательность с 0 на первой позиции.
Формула записывается следующим образом:
Вычисление ряда Фибоначчи — стандартная задача, которую задают на собеседованиях, чтобы проверить кандидата на понимание алгоритмов. Не так популярна, как сортировка, но всё же.
Давайте вычислим ряд и его отдельные элементы, использовав для этого язык Java.
Вычислить ряд Фибоначчи циклом
Предположим, что нам нужно вывести на экран первые десять чисел последовательности Фибоначчи. Мы помним, что:
- первый элемент ряда — 0, второй — 1;
- каждый последующий — сумма двух предыдущих.
Тогда наша последовательность будет иметь такой вид:
Но нам нужно вывести результат с использованием программы. Держите код с объяснениями в комментариях:
Выполнение завершится на десятом элементе. Количество элементов при этом можно менять, изменив значение в условиях цикла.
Найти число Фибоначчи через рекурсию
Рекурсивная функция — это такая функция, которая вызывает саму себя. Она также неплохо отрабатывает в алгоритмических задачах вроде чисел Фибоначчи, но ей требуется больше времени.
Почему так происходит? Всё дело в том, что рекурсивная функция приводит к многоразовому вызову одних и тех же операций. Именно из-за этого её не рекомендуется использовать, но если уж на собеседовании прозвучит такая задача, вы будете готовы.
Рассмотрим пример, в котором нам нужно получить n-ое число в ряде Фибоначчи:
Если в качестве num
задать большое значение, программа зависнет.
Тип int
в Java может хранить значения до 2147483647, так что вычислить получится лишь первые 46 чисел Фибоначчи. Тип long
хранит до 9223372036854775807, а это 91 число Фибоначчи. Класс BigInteger
призван работать с действительно большими значениями, вот только само выполнение программы это никак не ускорит.
Использовать для вычисления Stream
Stream в Java — это компонент для самостоятельной внутренней итерации своих же элементов. Подробнее о нём вы можете почитать в нашей статье о Java Stream API.
И, разумеется, Stream подходит для вычисления элементов последовательности Фибоначчи:
В данном примере метод iterate()
будет возвращать упорядоченный поток, ограниченный лимитом в num
значений и созданный с применением функции к начальному массиву arr
. В консоль будет выведено следующее:
А так мы получим сумму чисел последовательности по элемент num
включительно:
Математический тест
Любите математику? Попробуйте решить наш математический тест:
26К открытий29К показов