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此以上仍是不要用递归了
相关文章
相关标签/搜索