Курс 3.8 — Алгоритмы · Раздел 03 · Урок 3.8

Ограничения типов данных

Обсудим ограничения числовых типов, вычисления Фибоначчи и точность формулы Бине.

Обсудим ограничения числовых типов, вычисления Фибоначчи и точность формулы Бине.
3.8 — Ограничения типов данных

Материал урока

Ты заметишь, что числа Фибоначчи растут очень быстро. Для int диапазон обычно до ~2 млрд, а числа Фибоначчи выходят за эти рамки уже к n ≈ 47. Поэтому для больших n лучше использовать long long или даже BigInteger в языках, где он есть.

Парадигма «Разделяй и властвуй»

Рекурсивный подход к Фибоначчи — пример метода «разделяй и властвуй»:

  1. Разделяем задачу на подзадачи (F(n−1), F(n−2)).
  2. Решаем подзадачи независимо.
  3. Объединяем результаты.

В дальнейшем мы будем встречать этот принцип в более сложных алгоритмах.

Формула Бине

Есть способ вычислить число Фибоначчи напрямую, без рекурсии:

Формула Бине
Формула Бине

Хотя формула всегда даёт целые значения при целых n, она использует вещественные числа, что снижает точность на больших n из-за ошибок округления.

import math

def fib_binet(n):
    phi = (1 + math.sqrt(5)) / 2
    return round((phi**n - (-phi)**(-n)) / math.sqrt(5))

Важно: при больших n возможны ошибки округления из-за работы с вещественными числами.