刚才看到一个面试题,就写的试了试。题目:现在有一个牛,在4岁可生育,在15岁停育,20岁死亡。所生的牛都是和自身的生存规则一样的。也是4岁,15岁,20岁这样的。
问:N年之后还有多少头牛?答案一是我自己写的,不是递归的,因为我一到递归脑子就不对了,答案二是这个题附的答案,是递归的。结果都是一样的,但是答案一更完善,因为计算了初始也是M头牛的情况。答案一://我的思路是把所有的牛放在数组里,记录他们的年龄。
function niu($niu, $year){
        //初始的牛数,为他们建立数组,每头一个句柄哦
for($i=0; $i<$niu; $i++){
$num[$i] = 0;
}
        //年限循环
   for($y=1; $y<=$year; $y++){
                //该年度有多少头牛
$t = count($num);
                //过年了,每头牛长一岁
for($i=0; $i<$t; $i++){
$num[$i] = $num[$i]+1;
                        //如果生育年龄,在数组后面放一个年龄为0的牛的句柄
if($num[$i]>=4 && $num[$i]<15){
$num[count($num)] = 0;
}
}
}
$count = 0;
        //计数喽,还活着的
for($i=0; $i<count($num); $i++){
if($num[$i]<20)
$count++;
}
return $count;}
//第一个参数是初始牛头数,第二个是年限
echo niu(1, 10);答案二:
function t($n){
static $num = 1;
for($j=1; $j<=$n; $j++){
if($j>=4 && $j<15){
$num++;
t($n-$j);
}
if($j==20){
$num--;
}
}
return $num;
}
echo t(8);