#include <iostream>
using namespace std;
class CFibonacci
{
public:
CFibonacci()
{
vi[1] = 0.0;
vi[2] = 1.0;
}
double getNth(int n)
{
if(n < 0)
return -1;
else if(n == 0)
{
return 0.0;
}
else if(n == 1)
{
return 1.0;
}
for(int i = 2;i <= n;i ++)
{
vi[0] = vi[1];
vi[1] = vi[2];
vi[2] = vi[1] + vi[0];
}
return vi[2];
}
private:
double vi[3];
};
int main(int argc, char *argv[])
{
CFibonacci a;
cout << a.getNth(46) << endl;
return 0;
}<pre name="code" class="cpp">//这是类似于上面的递归,速度也还不错
long fibonacci(int n,long prepre,long pre,int begin = 2)
{
if(n == 0)
return 0;
else if(n == 1)
{
return 1;
}
else if(n==begin)
{
return pre+prepre;
}
return fibonacci(n, pre, prepre+pre, ++begin); //这里相当于迭代实现for-loop的浓缩
}