您的位置:首页 > 其它

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

2015-11-07 22:32 417 查看
#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的浓缩
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: