您的位置:首页 > 编程语言 > PHP开发

php递归、尾递归计算阶乘

2016-12-16 09:43 274 查看
c语言有尾递归之说,可以立即释放内存,效率也比递归要高。

之前使用php做了测试,测试结果显示尾递归在php中并没有效果。

$t1 = microtime(true); //时间点1
$m1 = memory_get_usage();
//递归
function a($n,$t=1){
if ($n>1) {
$t = a($n-1,$t*$n);
}
return $t;
}
//尾递归
function b($n,$t=1){
if ($n<=1) {
return $t;
}else {
return b($n-1,$t*$n);
}
}
//增加计算量
function _set($n=1,$x=10){
for ($i=0;$i<$x;$i++){
if ($n==1) {
$a = a(170);
}else{
$a = b(170);
}
}
}

//_set(1,400000); //调用递归
_set(2,400000); //调用尾递归

$t2 = microtime(true);
$m2 = memory_get_usage();

function convert($size){
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}

echo "用时(毫秒):".ceil(($t2-$t1)*pow(10,3));
echo "<hr>";
echo "m2=".$m2.";<br>m1=".$m1.";<br>内存使用:".convert($m2-$m1);


递归测试结果

用时(毫秒):34922

m2=332104;
m1=331944;
内存使用:160 b

尾递归测试结果

用时(毫秒):33948

m2=332104;
m1=331944;
内存使用:160 b
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 阶乘 尾递归