斐波那契数列

前言

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] ),指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

求斐波那契数列中第n个数

递归解法(缺点:时间复杂度很大,非多项式时间)

1
2
3
4
5
6
7
8
unsigned long long fb(int n){
    if (n<2) {
        return n;
    }else{
        return fb02(n-1)+fb02(n-2);
    }

}

动态规划解法(时间复杂度为O(n))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned long long fb(int n){
    if (n<2) {
        return n;
    }else{
        unsigned long long* a = new unsigned long long[n+1];
        a[0] = 0;
        a[1] = 1;
        for (int i = 2; i<=n; i++) {
            a[i] = a[i-1]+a[i-2];
        }
        return a[n];
    }

}

Comments