1

通过这个问题: PHP 是否优化尾递归?

php不会优化尾递归

但是当我在我的机器上尝试时,(php 5.3.10)

两个斐波那契程序:一个是正常递归,另一个是尾递归

使用的时间程序有很大不同:

我对此感到困惑,谁能告诉我为什么尾递归比普通递归快,如果php没有优化它?</p>

斐波那契.php:

<?php
function fibonacci($n) {
    if ($n < 2) {
        return $n; 
    }   
    return fibonacci($n - 1) + fibonacci($n - 2); 
}
var_dump(fibonacci(30));

fibonacci2.php:

<?php
function fibonacci2($n, $acc1, $acc2) {
    if ($n == 0) {
        return $acc1;
    }   
    return fibonacci2($n-1, $acc2, $acc1 + $acc2);
}

var_dump(fibonacci2(30, 0, 1));
4

1 回答 1

2

第二个脚本更快,因为它递归的总次数更少,而不是因为它使用尾递归。

(第一个脚本在每个级别调用自己两次。第二个脚本在每个级别只调用一次。因此,第二个脚本最终完成的工作远少于第一个。)

于 2012-07-10T01:33:54.677 回答