本文主要是介绍php递归、尾递归计算阶乘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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递归、尾递归计算阶乘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!