<?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此以上仍是不要用递归了