算法:斐波那契数列
2016-03-10 13:42
746 查看
引文:
在700多年前,意大利有一位著名数学家斐波那契在他的《算盘全集》一书中提出了这样一道有趣的兔子繁殖问题。
如果有一对小兔,每一个月都生下一对小兔,而所生下的每一对小兔在出生后的第三个月也都生下一对小兔。那么,由一对兔子开始,满一年时一共可以繁殖成多少对兔子?
用列举的方法可以很快找出本题的答案:
第一个月,这对兔子生了一对小兔,于是这个月共有2对(1+1=2)兔子。
第二个月,第一对兔子又生了一对兔子。因此共有3对(1+2=3)兔子。
到第三个月,第一对兔子又生了一对小兔而在第一个月出生的小兔也生下了一对小兔。所以,这个月共有5对(2+3=5)兔子。
到第四个月,第一对兔子以及第一、二两个月生下的兔子也都各生下了一对小兔。因此,这个月连原先的5对兔子共有8对(3+5=8)兔子。
……
可列表如下:
就是说,由一对兔子开始,满一年时一共可繁殖成377对小兔。
特别值得指出的是,数学家斐波那契没有满足于这个问题有了答案。他进一步对各个月的兔子对数进行了仔细观察,从中发现了一个十分有趣的规律,就是后面一个月份的兔子总对数,恰好等于前面两个月份兔子总对数的和,如果再把原来兔子的对数重复写一次,于是就得到了下面这样的一串数:
1,1,2,3,5,8,13,21,34,55,89,144,233,377……
后来人们为了纪念这位数学家,就把上面这样的一串数称作斐波那契数列,把这个数列中的每一项数称作斐波那契数。斐波那契数具有许多重要的数学知识,用途广泛。它引起了数学界的普遍关注,为了促进对它的研究,在美国还专门出版了一本杂志叫做《斐波那契季刊》,登载对这个数列的研究成果和最新发现。
php实现:
在700多年前,意大利有一位著名数学家斐波那契在他的《算盘全集》一书中提出了这样一道有趣的兔子繁殖问题。
如果有一对小兔,每一个月都生下一对小兔,而所生下的每一对小兔在出生后的第三个月也都生下一对小兔。那么,由一对兔子开始,满一年时一共可以繁殖成多少对兔子?
用列举的方法可以很快找出本题的答案:
第一个月,这对兔子生了一对小兔,于是这个月共有2对(1+1=2)兔子。
第二个月,第一对兔子又生了一对兔子。因此共有3对(1+2=3)兔子。
到第三个月,第一对兔子又生了一对小兔而在第一个月出生的小兔也生下了一对小兔。所以,这个月共有5对(2+3=5)兔子。
到第四个月,第一对兔子以及第一、二两个月生下的兔子也都各生下了一对小兔。因此,这个月连原先的5对兔子共有8对(3+5=8)兔子。
……
可列表如下:
[align=center]月份[/align] | [align=center]1[/align] | [align=center]2[/align] | [align=center]3[/align] | [align=center]4[/align] | [align=center]5[/align] | [align=center]6[/align] | [align=center]7[/align] | [align=center]8[/align] | [align=center]9[/align] | [align=center]10[/align] | [align=center]11[/align] | [align=center]12[/align] |
[align=center]兔子总对数[/align] | [align=center]2[/align] | [align=center]3[/align] | [align=center]5[/align] | [align=center]8[/align] | [align=center]13[/align] | [align=center]21[/align] | [align=center]34[/align] | [align=center]55[/align] | [align=center]89[/align] | [align=center]144[/align] | [align=center]233[/align] | [align=center]377[/align] |
特别值得指出的是,数学家斐波那契没有满足于这个问题有了答案。他进一步对各个月的兔子对数进行了仔细观察,从中发现了一个十分有趣的规律,就是后面一个月份的兔子总对数,恰好等于前面两个月份兔子总对数的和,如果再把原来兔子的对数重复写一次,于是就得到了下面这样的一串数:
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/>'; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项