斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果
兔子繁殖问题
斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对
两个月后,生下一对小兔对数共有两对
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对
依次类推可以列出下表:
经历月数 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
幼崽对数 | 1 | 0 | 1 | 1 | 2 |
成年对数 | 0 | 1 | 1 | 2 | 3 |
总体对数 | 1 | 1 | 2 | 3 | 5 |
幼仔对数=前月成兔对数
成兔对数=前月成兔对数+前月幼仔对数
总体对数=本月成兔对数+本月幼仔对数
可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。
PHP代码实现
$n = 输入值;
if ($n>=3) {
$x = 1;
$y = 1;
$n = $n-2;
do{
$fs = $x + $y;
$x = $y;
$y = $fs;
$n--;
}while($n>0)
echo $fs;
}
Go实现
package main
import "fmt"
func fi(n int) int {
if (n < 2) {
return n
}
return fi(n-1) + fi(n-2)
}
func main() {
var i int
for i=0; i<10; i++ {
fmt.Printf("%d\t", fi(i))
}
}