加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

(兔子繁殖问题)有一对兔子,从出生后第3个月起每个月都生一对兔

发布时间:2020-12-14 04:18:29 所属栏目:大数据 来源:网络整理
导读:网上关于这个问题有很多人说这个符合斐波那契数列,但是我个人在推算的时候发现并不是这样的,所以想自己解决这个问题 ? 建立一个兔子类 属性有ID,age public class rabbit{ public? $id; public ?age; } 第1个月:(id=1,age=1)---------------------------

网上关于这个问题有很多人说这个符合斐波那契数列,但是我个人在推算的时候发现并不是这样的,所以想自己解决这个问题

?

建立一个兔子类

属性有ID,age

public class rabbit{

  public? $id;

  public ?age;

}

第1个月:(id=1,age=1)------------------------------------------------------------------------------------------------------------------------------------------------------------------1

第2个月:(id=1,age=2)------------------------------------------------------------------------------------------------------------------------------------------------------------------1

第3个月:(id=1,age=3)------------------------------------------------------------------------------------------------------------------------------------------------------------------1

第4个月:(id=1,age=4) ?(id=2,age=0)------------------------------------------------------------------------------------------------------------------------------------------------2 ? ? ? ? ?

第5个月:(id=1,age=5) ?(id=2,age=1)?(id=3,age=0)-------------------------------------------------------------------------------------------------------------------------------3

第6个月:(id=1,age=6) ?(id=2,age=2)?(id=3,age=1)?(id=4,age=0)--------------------------------------------------------------------------------------------------------------4

第7个月:(id=1,age=7) ?(id=2,age=3)?(id=3,age=2)?(id=4,age=1)?(id=5,age=0)---------------------------------------------------------------------------------------------5

第8个月:(id=1,age=8) ?(id=2,age=4)?(id=3,age=3)?(id=4,age=2)?(id=5,age=1)?(id=6,age=0)?(id=7,age=0)-----------------------------------------------------------7

第9个月:(id=1,age=9) ?(id=2,age=5)?(id=3,age=4)?(id=4,age=3)?(id=5,age=2)?(id=6,age=1)?(id=7,age=1)(id=8,age=0)(id=9,age=0)(id=10,age=0)--------10

第十个月:(id=1,age=10) ?(id=2,age=6)?(id=3,age=5)?(id=4,age=4)?(id=5,age=3)?(id=6,age=2)?(id=7,age=2)(id=8,age=1)(id=9,age=1)(id=10,age=1)(id=11,age=0)(id=12,age=0)(id=13,age=0)(id=14,age=0)---14

?

1:以数学的思想解决此问题

  通过以上数列,可以发现规律 an?=an-1+an-4

  这时,可以用递归的思想来解决

//使用递归实现
function get_rabbit_num($v)
{

if ($v==1){
return 1;
}
if ($v==2){
return 1;
}
if ($v==3){
return 1;
}
if ($v==4){
return 2;
}
else{
return get_rabbit_num($v-1)+get_rabbit_num($v-4);
}
}

echo get_rabbit_num(14);

2、以编程的思想来解决此问题
class rabbit{    public $id;    public $age;    public $parent_id;    public function __construct($id,$age,$parent_id)    {        $this->id=$id;        $this->age=$age;        $this->parent_id=$parent_id;    }}//月龄加1function addAge(&$v){    $v->age+=1;}//判断是否能生孩子(第三个月的时候才怀上,第四个月才生出来)function isOk($v){   if ($v->age>3){       return true;   }else{       return false;   }}    $array_rabbit=[];//兔子的集合    $rabbit=new rabbit(‘1‘,0);//第一对兔子    array_push($array_rabbit,$rabbit);    for ( $i=0;$i<14;$i++){        array_filter($array_rabbit,"addAge");//每过一个月,先让每对兔子的月龄+1        $array_tmp=array_filter($array_rabbit,"isOk");//找出能生兔子的兔子        $ok_num=count($array_tmp); //能生兔子的兔子数        if (!$ok_num){ //如果都不能生,直接开始下一轮循环            continue;         } else{        $id_max=max(array_column($array_rabbit,"id"));//最大的id值            foreach ($array_tmp as $item) {                $id_max+=1;//新生出来的兔子的id                $rabbit_new=new rabbit($id_max,$item->id);//新建一个兔子对象(新生出来的兔子月龄都为0),并指向是哪对兔子生的                array_push($array_rabbit,$rabbit_new);//将新生出来的兔子加入集合            }     }    }echo count($array_rabbit);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读