<仅是自己做笔记。。。系列-11>输入n,用最快的方法求Fibonacci数列的第n项。

来源:互联网 发布:win10有网络不能上网 编辑:程序博客网 时间:2024/04/20 09:39
#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的浓缩}


0 0