一. 斐波那契
斐波那契, 又称比萨的列奥纳多;意大利数学家,西方第一个研究斐波那契数,并将现代书写数和乘数的位值表示法系统引入欧洲。
二. 斐波那契数列
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 < {
ret = n
} else {
ret = recursion(n) + recursion(n)
}
return
}
算法二: 非递归
func noRecusion(n int) int {
x, y :=,
for i :=; i < n; i++ {
x, y = y, x+y
}
return x
}
2. Python实现
算法一: 递归
def recursion(n):
if n < :
return n
else:
return recursion(n-) + recursion(n-)
算法二: 非递归
def no_recursion(n):
x, y = ,
for i in range(n):
x, y = y, x+y
return x
3. C/C++语言实现
算法一: 递归
int recursion(int n) {
if (n < ) {
return n;
}else {
return recursion(n - ) + recursion(n - );
}
}
算法二: 非递归
int noRecursion(int n) {
int x, y;
x = ;
y = ;
for (int i = ; i < n; i++) {
int preX = x;
x = y;
y = preX + y;
}
return x;
}