现在的位置: 首页 > 综合 > 正文

斐波那契数列

2013年10月27日 ⁄ 综合 ⁄ 共 861字 ⁄ 字号 评论关闭
斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34……

这个数列从第三项开始,每一项都等于前两项之和。
解法一:可以使用递归求解,代码如下:

#include<iostream>
using namespace std;
long long Fib(unsigned int);
int main()
{
    for(int i=1;i<20;i++)
        cout<<Fib(i)<<endl;
    cout<<endl;
    return 0;
}
long long Fib(unsigned int n)
{
    if(n==1)
        return 0;
    if(n==2)
        return 1;
    else
        return Fib(n-1)+Fib(n-2);
}

递归问题有着严重的效率问题 ,随着n的增大,递归方法的复杂度是以n的指数的方式递增的。
解法二:
更简单的方法是从底向上计算,即先求出Fib(1),Fib(2),然后求出Fib(3).....以此类推就可以计算出第n项了,这种方法的时间复杂度是O(n).
代码如下:

#include<iostream>
using namespace std;
long long Fibonacci(unsigned int);
int main()
{
    cout<<Fibonacci(1)<<endl;
    cout<<Fibonacci(10)<<endl;
    return 0;
}
long long Fibonacci(unsigned int n)
{
    if(n==1)
        return 0;
    if(n==2)
        return 1;
    long long FibNMinusOne =0;
    long long FibNMinusTwo=1;
    long long FibN=0;
    for(unsigned int i=2;i<n;i++)
    {
        FibN= FibNMinusOne + FibNMinusTwo;
        FibNMinusOne =FibNMinusTwo;
        FibNMinusTwo =FibN;
    }
    return FibN;
}

运行结果:


Reference算法分析与设计基础》潘彦译
《计算机算法与分析》 王晓东
名企面试官精讲典型编程题》 何海涛

抱歉!评论已关闭.