1. 定义
数学上,以递归的方式来定义:
- F ( 1 ) = 1 F(1) = 1 F(1)=1
- F ( 2 ) = 1 F(2) = 1 F(2)=1
- F ( n ) = F ( n − 1 ) + F ( n − 2 ) ( n ⩾ 2 ) F(n) = F(n-1) + F(n-2)\space\space (n \geqslant 2) F(n)=F(n−1)+F(n−2) (n⩾2)
2. 来源
在西方,最先研究这个数列的人是意大利人斐波那契(Leonardo Fibonacci),提出一个数列用来描述兔子生长的数目:
- 第一个月初有一对刚诞生的兔子
- 第三个月初它们可以生育兔子
- 每月每对可生育兔子会诞生一对新兔子
- 兔子永不死去
如果 n n n 月有 a a a 只兔子, n + 1 n+1 n+1 月有 b b b 只兔子,则 n + 2 n+2 n+2 月有 a + b a+b a+b 只
3. 算法
3.1 递归方法
int fibonacci(int a){
if(a<3){
return 1; // n=1或n=2时
}
return fibonacci(a-1) + fibonacci(a-2); // n>2时
}
- 时间复杂度: O ( 2 n ) O(2^n) O(2n) (递归树)
- 空间复杂度: O ( n ) O(n) O(n) (栈的压栈和出栈)
3.2 动态规划
int64_t fibonacci_dp(int a){
int n = 10000;
int64_t f[n];
f[1] = 1;
f[2] = 1;
for(int i=3; i<=a; i++){
f[i] = f[i-1] + f[i-2];
}
return f[a];
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
3.3 简化动态规划
int64_t fibonacci_dp_simplify(int a){
int64_t m = 1, n = 1, r = 1;
for(int i=3; i<=a; i++){
r = m + n;
m = n;
n = r;
}
return r;
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
3.4 最优解法(套公式)
double fibonacci_math(int a){ // 返回值类型为double
return (pow((1+sqrt(5))/2, a) - pow((1-sqrt(5))/2, a))/sqrt(5);
}
- 时间复杂度: O ( 1 ) O(1) O(1)
- 空间复杂度: O ( 1 ) O(1) O(1)
- 公式:
F
(
n
)
=
1
5
[
(
1
+
5
2
)
n
−
(
1
−
5
2
)
n
]
F(n) = \dfrac{1}{\sqrt{5}} \bigg[ \bigg(\dfrac{1+\sqrt{5}}{2}\bigg)^n - \bigg(\dfrac{1-\sqrt{5}}{2}\bigg)^n\bigg]
F(n)=51[(21+5)n−(21−5)n]
数学推导(wiki)或数学推导(baidu)
4. 应用
-
黄金分割:
斐波那契数列的后一项与前一项的比值构成一个数列 1 1 , 2 1 , 3 2 , 5 3 , 8 5 . . . \dfrac 1 1, \dfrac 2 1, \dfrac 3 2, \dfrac 5 3, \dfrac 8 5... 11,12,23,35,58...
趋近于黄金分割: F ( n + 1 ) F ( n ) ≈ 1 + 5 2 = φ ≈ 1.618... \dfrac {F(n+1)}{F(n)} \approx\dfrac{1+\sqrt5}{2} = \varphi\approx1.618... F(n)F(n+1)≈21+5=φ≈1.618...
例如:
许多生物的构成都和斐波那契数列呈正相关。
向日葵的种子排列顺序有99%是 F n F_n Fn。人体的黄金比例: d 头 顶 至 脚 底 d 肚 脐 至 脚 底 = lim x → ∞ F ( n + 1 ) F ( n ) = φ \dfrac{d_{头顶至脚底}}{d_{肚脐至脚底}} = \displaystyle\lim_{x\to\infin}{\dfrac{F(n+1)}{F(n)}}=\varphi d肚脐至脚底d头顶至脚底=x→∞limF(n)F(n+1)=φ
参考文章:https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97