算法:斐波那契数列

    引文:

    在700多年前,意大利有一位著名数学家斐波那契在他的《算盘全集》一书中提出了这样一道有趣的兔子繁殖问题。
    如果有一对小兔,每一个月都生下一对小兔,而所生下的每一对小兔在出生后的第三个月也都生下一对小兔。那么,由一对兔子开始,满一年时一共可以繁殖成多少对兔子?
    用列举的方法可以很快找出本题的答案:
    第一个月,这对兔子生了一对小兔,于是这个月共有2对(1+1=2)兔子。
    第二个月,第一对兔子又生了一对兔子。因此共有3对(1+2=3)兔子。
   到第三个月,第一对兔子又生了一对小兔而在第一个月出生的小兔也生下了一对小兔。所以,这个月共有5对(2+3=5)兔子。
    到第四个月,第一对兔子以及第一、二两个月生下的兔子也都各生下了一对小兔。因此,这个月连原先的5对兔子共有8对(3+5=8)兔子。
……
    可列表如下:

月份
1
2
3
4
5
6
7
8
9
10
11
12
兔子总对数
2
3
5
8
13
21
34
55
89
144
233
377

   就是说,由一对兔子开始,满一年时一共可繁殖成377对小兔。
   特别值得指出的是,数学家斐波那契没有满足于这个问题有了答案。他进一步对各个月的兔子对数进行了仔细观察,从中发现了一个十分有趣的规律,就是后面一个月份的兔子总对数,恰好等于前面两个月份兔子总对数的和,如果再把原来兔子的对数重复写一次,于是就得到了下面这样的一串数:
   1,1,2,3,5,8,13,21,34,55,89,144,233,377……
   后来人们为了纪念这位数学家,就把上面这样的一串数称作斐波那契数列,把这个数列中的每一项数称作斐波那契数。斐波那契数具有许多重要的数学知识,用途广泛。它引起了数学界的普遍关注,为了促进对它的研究,在美国还专门出版了一本杂志叫做《斐波那契季刊》,登载对这个数列的研究成果和最新发现。

    php实现

function f($n){
 if($n == 1 || $n == 2){
   //如果n为1或者2,返回1 
       return 1;
 }else{
   //如果n >= 3,f(n) = f(n-1) + f(n-2);
       return f($n - 1) + f($n - 2);
 }
}
//输出:11以内的斐波那契数列
$n = 11;
for($i = 1; $i < n; $i ++ ){
  echo f($i);
  echo '<br/>';
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章