一、小知识(概念 + 趣味故事)
1、斐波那契数列:
1 1 2 3 5 8 13 21 34 55 …
概念:
前两个值都为1,该数列从第三位开始,每一位都是当前位前两位的和
规律公式为:
Fn = F(n-1) + F(n+1)
F:指当前这个数列
n:指数列的下标
2、永生的兔子
斐波纳契早年思考一个关于兔子繁殖的数学问题:从一只雄兔和一只雌兔开始,一年能生多少对兔子?该问题假设了以下条件:从一只刚出生的公兔和母兔开始。兔子在一个月后达到性成熟。兔子的妊娠期是一个月。雌性兔子性成熟后,每月生育一次。一只母兔子生了一只公兔子和一只母兔子。兔子不会死。如下图所示:
二、源代码(递归 + 非递归)实现
<?php
function test() {
$x = 39; //自增量 可变
$star_time = time();
//斐波那锲数列 递归调用
$arr = [];
for ($i=1; $i<=$x; $i++) {
$arr[] = f_digui($i);
}
//非递归方式生成
$arr2 = fbnq($x);
$end_time = time();
echo "<pre>"; print_r($arr);
echo "<pre>"; print_r($arr2);
echo "<pre>"; print_r($star_time - $end_time);exit;
}
//非递归写法:
function fbnq($n){ //传入数列中数字的个数
if($n <= 0){
return 0;
}
$array[1] = $array[2] = 1; //设第一个值和第二个值为1
for($i=3;$i<=$n;$i++){ //从第三个值开始
$array[$i] = $array[$i-1] + $array[$i-2];
//后面的值都是当前值的前一个值加上前两个值的和
}
return $array;
}
//递归写法:
public function f_digui($n){
if($n == 1 || $n == 2) return 1;
return f_digui($n - 1) + f_digui($n - 2);
}
二、结果演示 :由于php和python是单进程的,跑的过程中发现以下两个神奇的事情:
1、当自变量达到40的时候程序会异常, 跑不动,这个时候数据刚过亿, 是不是就是传说中的奇点
2、数值越大, 前后的两个数字之比越接近0.618
来源:CSDN
作者:sunnyMlon
链接:https://blog.csdn.net/a5485899/article/details/103779763