2012-07-09 56 views
0

优化: Does PHP optimize tail recursion?确实尾递归会被这个问题在PHP

PHP不会优化尾递归

但是当我尝试我的机器,(PHP 5.3.10)

两个方案供斐波纳契:一种是正常递归,另一个是尾递归

使用的时间的程序不同的很多:

,我感到困惑有关,谁可以告诉我为什么尾递归是快于正常递归,如果PHP不优化它

fibonacci.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)); 
+2

请,显示两个脚本的源代码。 – Oroboros102 2012-07-09 07:00:50

+0

嗨,我为此添加了脚本 – jianfeng 2012-07-10 01:22:33

回答

2

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

(第一个脚本在每个级别自称两次。第二个脚本仅在每个级别自称一次。因此,第二个脚本简单地结束了做比第一个要少得多。)