2012-07-09 32 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

第二個腳本是更快,因爲它遞歸總次數少,並不是因爲它使用了尾遞歸。

(第一個腳本在每個級別自稱兩次。第二個腳本僅在每個級別自稱一次。因此,第二個腳本簡單地結束了做比第一個要少得多。)