- го числа Фибоначчи может быть вычислен в линейное время с использованием следующего повторения:
def fib(n):
i, j = 1, 1
for k in {1...n-1}:
i, j = j, i+j
return i
- го числа Фибоначчи также может быть вычислена как [ ф п / √. Тем не менее, это имеет проблемы с проблемами округления даже для относительно небольшихn. Наверное, естьспособы обойти это,но я бы не стал этого делать.
Существует ли эффективный (логарифмический по значению или лучше) алгоритм для вычисления n- го числа Фибоначчи, которое не зависит от арифметики с плавающей запятой? Предположим, что целочисленные операции ( + , - , × , / ) могут выполняться за постоянное время.
Ответы:
Вы можете использовать матричное питание и тождество В вашей модели вычислений это алгоритм O ( log n ) , если вы используете многократное возведение в квадрат для реализации питания.
источник
Вы можете прочитать эту математическую статью: Быстрый алгоритм для вычисления больших чисел Фибоначчи (Daisuke Takahashi): PDF .
Проще говоря, я реализовал несколько алгоритмов Фибоначчи на C ++ (без и с GMP) и Python. Полные источники на Bitbucket. На главной странице вы также можете перейти по ссылкам на:
Наиболее полезные формулы:
Будьте осторожны с алгоритмом. Вы не должны вычислять одно и то же значение несколько раз. Простой рекурсивный алгоритм (в Python):
источник
Проверьте бесплатную книгу Matters Computational и pari / gp code.
источник