PHP迭代效率(裴波那契數列)

<?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此以上仍是不要用遞歸了
相關文章
相關標籤/搜索