<?php
class runTime {
private $starTime;//開始時間
private $stopTime;//結束時間
private function getMicTime(){
$mictime=microtime();//獲取時間戳和微秒數
list($usec,$sec)=explode(" ",$mictime);//把微秒數分割成數組並轉換成變量處理
return (float)$usec+(float)$sec;//把轉換後的數據強制用浮點點來處理
}
public function star(){//獲取開始時間
$this->starTime=$this->getMicTime();
}
public function stop(){//獲取結束時間
$this->stopTime=$this->getMicTime();
}
public function spent(){//計算程序持續時間
return round($this->stopTime-$this->starTime)*1000;//獲取毫秒數
}
}
$time=new runTime();
$time->star();
function pblq($N) {
$a=sqrt(5);
$b=(1+$a)/2;
$c=(1-$a)/2;;
$d=bcdiv(bcsub(bcpow($b,$N,1000),bcpow($c,$N,1000),1000),$a,1000);
$e=explode(".",$d);
$f=substr($e[1],0,1);
if($f>=5)$g=1;
else $g=0;
$pblq=bcadd($e[0],$g,0);
return $pblq;
}
$N=3000;
if($N){
echo pblq($N);
echo "<br>";
}
$time->stop();
echo $time->spent(); //話費時間1s
?>
<?php
class runTime {
private $starTime;//開始時間
private $stopTime;//結束時間
private function getMicTime(){
$mictime=microtime();//獲取時間戳和微秒數
list($usec,$sec)=explode(" ",$mictime);//把微秒數分割成數組並轉換成變量處理
return (float)$usec+(float)$sec;//把轉換後的數據強制用浮點點來處理
}
public function star(){//獲取開始時間
$this->starTime=$this->getMicTime();
}
public function stop(){//獲取結束時間
$this->stopTime=$this->getMicTime();
}
public function spent(){//計算程序持續時間
return round($this->stopTime-$this->starTime)*1000;//獲取毫秒數
}
}
//舉例
$time=new runTime();
$time->star();
function pblq($N) {
if($N==1) {
$a[$N]=1;return $a[$N];}
if($N==2) {
$a[$N]=1;return $a[$N];}
if($N>=3) {
$a[$N]=bcadd(pblq($N-1),pblq($N-2),0);
return $a[$N];
}
}
$N=30;
if($N){
echo pblq($N);
echo "<br>";
}
$time->stop();
echo $time->spent(); //話費時間16s
?>
無聊,看看php的迭代效率,結果差異是至關的大啊,裴波那切數列第N項。迭代30項花費時間16s。通項公式計算第3000項花費時間1s。環境都是本人的筆記本!差異不在一個數量級啊。結論遞歸次數超狗20此以上仍是不要用遞歸了