前言
斐波那契数列(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];
}
}
|