之前前面发的都是笔墨条记,本日发个练习,算出每月兔子的总数。下面是题目。及案例代码。
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,如果兔子都不去世,问每个月的兔子总数为多少?
<?php

//题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,如果兔子都不去世,问每个月的兔子总数为多少?
//1.程序剖析: 兔子的规律为数列1,1,2,3,5,8,13,21....
//1,1,1,1,1
// 1,1,1
// 1,1
// 1
// 1
//1.1对兔子
//2.生不出,只有一对
//3.生一对兔子,2对
//4.生一对兔子,3对兔子
//1月:$first = 1;//1月的兔子
//2月:$second = 1;
//3月:$third = 2 $first = 2;
//4月:$fourth = $second 2 = 2; 加上3月新生的兔子 $third - $second = 1, ===>3
//5月:$fifth = $third 2 + ($fourth - $third) = 2 2 + (3 - 2) = 5
//思路
//1.要知道前两个月,默认从第一个月开始
//$first = 1;
//$second = 1;
//2.哀求第N个月兔子数量,须要知道第N-1月和第N-2月的兔子
//$third = 2 $first + ($second - $first) = 2;
//$first = $second;
//$second = $third;
//3.要知道第N-1月的兔子和第N-2月的兔子
//4.要实现可以随机求指定月数的兔子数,利用函数来处理
//1:先定义一个函数,默认从第三个月开始获取兔子数量
function tuzi($yueshu = 3){
//2:先初始化默认的第一月和第仲春的兔子数组
$first = 1;
$second = 1;
//3:判断用户到底是获取第几个月的兔子
//如果用户问的是第一月或者第仲春的兔子,直接返回1
if($yueshu == 1 || $yueshu == 2) return 1;
//4:用户获取的不是已知月份的兔子,须要打算
//不知道用户是要获取第几月的兔子,须要将前面月份的兔子都求出来
for($i = 3; $i <= $yueshu; $i++){
//5:从第三月开始把每个月的兔子数量都求出来
//当前月即是前前月的兔子翻倍之后,加上前一个月出生的兔子
$third = 2 $first + ($second - $first);
//6:将前两个月的兔子数量进行重新整理,之前$first向后推一个,变成第$second月的兔子数量,$second月份数量也要今后推,变成第$third月份的
$first = $second;
$second = $third;
}
//7:将获取到确当前月的兔子返回给用户
return $third;
}
//8:调用tuzi函数
echo tuzi(2);//1
echo tuzi(3);//2
//3:1,1,2
//4:1,2,3
//5:2,3,5
echo tuzi(5);//5
//1:先定义一个函数,默认从第三个月开始获取兔子数量
//2:先初始化默认的第一月和第仲春的兔子数组
//3:判断用户到底是获取第几个月的兔子
//4:用户获取的不是已知月份的兔子,须要打算
//5:从第三月开始把每个月的兔子数量都求出来
//6:将前两个月的兔子数量进行重新整理,之前$first向后推一个,变成第$second月的兔子数量,$second月份数量也要今后推,变成第$third月份的
//7:将获取到确当前月的兔子返回给用户