一只羊的故事

     今天看到了一道很有意思的题目:假如有一只羊,第3年第4年的时候,可以各生一只小羊;第5年死亡;小羊养到第3年和第4年的时候,也可以各生一只小羊,第5年死亡。问10年之后,拥有多少只小羊?

      刚看到这道问题,就想到了一个方法:

<?php
function sheep($int, $year) {
       $arr = array();
       for ($i=1; $i<=$int; $i++) {
              $arr[] = 1;
       }
       for ($j=1; $j<$year; $j++) {
              foreach ($arr as $k=>$v) {
                     $arr[$k] += 1;
                     if ($arr[$k]==3)
                            $arr[] = 1;
                     elseif ($arr[$k]==4) 
                            $arr[] = 1;
                     elseif ($arr[$k]==5) 
                            unset($arr[$k]);
              }     
       }
       return count($arr).'</br>';
}
?>

   在现有的条件下,可以实现想要的功能。但是在年份比较多的情况下,循环次数增加,数组成员剧增,内存直接报警,50年就超过了128M内存,所以这个方法绝对是不适用的。

   仔细思考了一下,羊在第5年就死亡了,也就是说只能活到四岁,那么就把同龄的羊归类到一起不就可以了,那就从一个几百万成员的大数组,变成了只有四个成员的数组。

<?php
function new_sheep($int, $year) {
       $arr = array($int,0,0,0,0);
       for ($i=1; $i<$year; $i++) {
              list($one,$two,$three,$four,$five)= $arr;
              $arr[0] = $two + $three;
              $arr[1] = $one ;
              $arr[2] = $two;
              $arr[3] = $three;
       }
       return ($arr[0]+$arr[1]+$arr[2]+$arr[3]);
}
?>

再测试了一下,没有内存溢出的提示了。

题目本身并不是很难的题,甚至都称不上编程的题目。但就这样的一个题目,仔细思考一下,就能把性能优化这么多。可见平时开发过程中、遇到的的功能模块,一定要多去思考解决方案、多去学习成熟的解决思路!每次完成一个功能,都要及时的进行总结,不能让自己的项目经验变成项目经历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值