递归法,迭代法,近似值法
#include <iostream>
#include <boost/timer/timer.hpp>
using namespace boost::timer;
using namespace std;
double fib( double n){
if(n<=1) return n;
else return fib(n-1) + fib(n-2);
}
double iteratorfib(double n){
if(n<=1)return n;
double fi=0,fi_1=1,fi_2=0;
for (int i = 2; i <= n; i++)
{
fi=fi_1+fi_2;
fi_2=fi_1;
fi_1=fi;
}
return fi;
}
double Fi(double n)
{
double fi=(1+sqrt(5));
double m=2;
double sFi=1,sM=1;
for(int i=0;i<n;++i){
sFi*=fi;
sM*=m;
}
fi=floor(sFi/(sM*sqrt(5))+1.0/2);
return fi;
}
int main()
{
cpu_timer t1;
t1.start();
cout<<fib(40)<<endl;
t1.stop();
cout<<t1.format();
cpu_timer t2;
t2.start();
cout<<iteratorfib(40)<<endl;
t2.stop();
cout<<t2.format();
cpu_timer t3;
t3.start();
cout<<Fi(40)<<endl;
t3.stop();
cout<<t3.format();
}