【问题标题】:Does Tail Recursion will be an optimization in php尾递归会是php中的优化吗
【发布时间】:2013-01-10 15:48:14
【问题描述】:

通过这个问题: Does PHP optimize tail recursion?

php不会优化尾递归

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

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

使用的时间程序差别很大:

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

斐波那契.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));

【问题讨论】:

  • 请显示两个脚本的源代码。
  • 嗨,我已经为此添加了脚本

标签: php


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 2012-10-14
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2010-12-03
    • 2014-06-23
    • 2011-01-25
    相关资源
    最近更新 更多