斐波那契
一. 斐波那契
斐波那契, 又称比萨的列奥纳多;意大利数学家,西方第一个研究斐波那契数,并将现代书写数和乘数的位值表示法系统引入欧洲。
二. 斐波那契数列
1. 问题由来
上面那个肥波,在《计算之书》中提出兔子在理想条件下繁殖,各代兔子数所构成的数列
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 …
2. 特点
- 前两项为: 0, 1
- 特别说明: 项数从0开始
- 从第2项开始,每项等于前两项之和
- 随项数增大,相邻两项斐波那契数之商趋于黄金比例(1:1.618或0.618:1)
- 因而又称黄金分割数列
三. 程序描述
1. Go语言实现
算法一: 递归
func recursion(n int) (ret int) {
if n < 2 {
ret = n
} else {
ret = recursion(n-1) + recursion(n-2)
}
return
}
算法二: 非递归
func noRecusion(n int) int {
x, y := 0, 1
for i := 0; i < n; i++ {
x, y = y, x+y
}
return x
}
2. Python实现
算法一: 递归
def recursion(n):
if n < 2:
return n
else:
return recursion(n-1) + recursion(n-2)
算法二: 非递归
def no_recursion(n):
x, y = 0, 1
for i in range(n):
x, y = y, x+y
return x
3. C/C++语言实现
算法一: 递归
int recursion(int n) {
if (n < 2) {
return n;
}else {
return recursion(n - 1) + recursion(n - 2);
}
}
算法二: 非递归
int noRecursion(int n) {
int x, y;
x = 0;
y = 1;
for (int i = 0; i < n; i++) {
int preX = x;
x = y;
y = preX + y;
}
return x;
}