斐波那契数列
斐波那契数列
斐波那契数列在数学和生活以及自然界中都非常有用。斐波那契数列最早被提出是印度数学家 Gopala,他在研究箱子包装物件长度恰好为 1 和 2 时的方法数时首先描述了这个数列。也就是这个问题:有 n 个台阶,你每次只能跨一阶或两阶,上楼有几种方法?
最早研究这个数列的当然就是斐波那契(Leonardo Fibonacci)了,他当时是为了描述如下情况的兔子生长数目:
- 第一个月初有一对刚诞生的兔子
- 第二个月之后(第三个月初)它们可以生育
- 每月每对可生育的兔子会诞生下一对新兔子
- 兔子永不死去
斐波那契数列是编程书中讲递归必提的,因为它是按照递归定义的,所以我们就从递归开始讲起。
int Fib(int n)
{
return n < 2 ? 1 : (Fib(n-1) + Fib(n-2));
}
这是编程最方便的解法,当然,也是效率最低的解法,原因是会出现大量的重复计算。为了避免这种情况,可以采用递推的方式。
int Fib[1000];
Fib[0] = 0;Fib[1] = 1;
for(int i = 2;i < 1000;i++) Fib[i] = Fib[i-1] + Fib[i-2];