Итак, мы видим много вопросов о Фибоначчи.Я лично ненавижу их.Много.Больше чем много.Я подумал, что было бы здорово, если бы мы могли сделать невозможным, чтобы кто-нибудь снова использовал это как вопрос для интервью.Давайте посмотрим, как близко к O (1) мы можем получить фибоначчи.
Вот мой старт, в значительной степени crib'd из Википедии, с, конечно, большим запасом мощности.Важно отметить, что это решение будет детонировать для любого особенно большого фиба, и оно содержит относительно наивное использование функции power, которая в худшем случае помещает ее в O (log (n)), если ваши библиотеки не годятся.Я подозреваю, что мы можем избавиться от функции власти или, по крайней мере, специализировать ее.Кто-нибудь хочет помочь?Есть ли истинное решение O (1), кроме конечного * решения с использованием справочной таблицы?
http://ideone.com/FDt3P
#include <iostream>
#include <math.h>
using namespace std; // would never normally do this.
int main()
{
int target = 10;
cin >> target;
// should be close enough for anything that won't make us explode anyway.
float mangle = 2.23607610;
float manglemore = mangle;
++manglemore; manglemore = manglemore / 2;
manglemore = pow(manglemore, target);
manglemore = manglemore/mangle;
manglemore += .5;
cout << floor(manglemore);
}
* Я знаю, язнаете, этого достаточно для любого практического использования, которое имеет Фибоначчи.