【发布时间】:2012-11-30 12:00:11
【问题描述】:
我在 PHP 中创建了 2 个版本的阶乘函数用于基准测试,一个使用普通递归,另一个使用尾递归。后者应该更快,但结果显示并非如此。我在这里有什么遗漏吗?
我的代码如下,包括基准测试:
<?php
benchmark();
function benchmark()
{
$n = 10;
$multiplier = 10000;
$functions = array('factorial_recursive', 'factorial_tailRecursive');
foreach ($functions as $function) {
$start = microtime(true);
echo $function . '<br>';
echo $function($n) . '<br>';
echo ($multiplier * (microtime(true) - $start)) . '<br><br>';
}
}
function factorial_recursive($n)
{
if ($n == 1) {
return $n;
}
return $n * factorial_recursive($n - 1);
}
function factorial_tailRecursive($n, $result = 1)
{
if ($n == 1) {
return $result;
}
return factorial_tailRecursive($n - 1, $result * $n);
}
打印输出:
factorial_recursive
3628800
2.4199485778809
factorial_tailRecursive
3628800
2.5296211242676
任何见解表示赞赏 - 谢谢!
【问题讨论】:
-
感谢链接,之前看到过,但没有回答我的问题。想知道 PHP 引擎是否在后端做了任何导致这种情况的事情
-
您运行了多少次基准测试?尾递归版本总是更慢吗?你确定 0.1 秒不是一个可以忽略的时间差吗?
标签: php recursion tail-recursion