網上關於這個問題有不少人說這個符合斐波那契數列,可是我我的在推算的時候發現並非這樣的,因此想本身解決這個問題編程
創建一個兔子類this
屬性有ID,agespa
public class rabbit{對象
public $id;遞歸
public age;get
}數學
第1個月:(id=1,age=1)------------------------------------------------------------------------------------------------------------------------------------------------------------------1it
第2個月:(id=1,age=2)------------------------------------------------------------------------------------------------------------------------------------------------------------------1io
第3個月:(id=1,age=3)------------------------------------------------------------------------------------------------------------------------------------------------------------------1function
第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);
二、以編程的思想來解決此問題
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,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,0,$item->id);//新建一個兔子對象(新生出來的兔子月齡都爲0),並指向是哪對兔子生的 array_push($array_rabbit,$rabbit_new);//將新生出來的兔子加入集合 } } }echo count($array_rabbit);