《斐波那契数列算法》
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:一对兔子也就是两只,有类似的要计算兔子的对数,逻辑一样,第三个月都生一对兔子,那么我们按第三个月开始增量而不是第三个月后开始增量。
月数 | 1个月 | 2个月 | 3个月 | 4个月 | 5个月 | 6个月....... |
数量 | 2 | 2 | 4 | 6 | 10 | 16 |
增量 | 2+0 | 2+0 | 2+2 | 4+2 | 6+4 | 10+6 |
代码:
/**
* @param $month 月
* @param $t 数量
* @return int|mixed
*/
function rabbit_algorithm($month, $t)
{
$node = 3; //增长的节点
$growth = 1; //增长用于判断第几个月开始增长
$baby = 0; //宝宝的数量
for ($i = $month; $i > 0; $i--) {
$z1 = 0;
if ($growth >= $node) {
$z1 = rabbit_algorithm($i, 2);
}
$baby = $baby + $z1;
$growth++;
}
return $t + $baby;
}
$month = 10; //求几个月
for ($i = 1; $i <= $month; $i++) {
echo "第:" . $i . "个月,共:" . rabbit_algorithm($i, 2) . "只兔子\n";
}
运行结果:
测试的话月份不要写太大,递归调用很卡。
按这么计算我买两只兔子养个两年都能发财了,兔子一般都能活两年吧。