2009-11-28 58 views
1

我保證這不是功課。我只是一個好奇的新手。PHP:有人可以解釋這段代碼的工作原理嗎? (斐波那契)

如何做到這一點:

function f($i){return $i<2?$i:f($i-1)+f($i-2);} 

(寫人聰明)

產生相同的結果,因爲這

function fibonacci($n, $arr = array(0,1)){ 
    $arr[] = $arr[(count($arr) - 1)] + $arr[(count($arr) - 2)]; 
    if (count($arr) == $n) return $arr[$n - 1]; 
    else return fibonacci($n, $arr); 
} 

(礦)

我想我只是不沒有語法。那裏是否有if語句?

回答

5

運營商「?」被命名爲三元運算符。它用於:p1?p2:p3它表示如果p1爲真,則p2,否則p3。

+1

哇。這很方便。 – Greg 2009-11-28 02:46:31

2

問號是一個條件表達式:

x ? a : b 

評估爲a如果x爲真,或者b如果是假的。

3

第一個功能是速記。這是它在做什麼

if($i < 2) { // $i < 2 ? 
    return $i; 
} 
else { // : 
    return f($i-1)+f($i-2); 
} 

如果它少於兩個,函數不必被調用。如果它是2或更大,則遞歸調用該函數。

2
function f($i){return $i<2?$i:f($i-1)+f($i-2);} 

裝置

function f($i) 
{ 
    if $(i < 2) 
     return $i; 
    return f($i-1) + f($i-2); 
} 

這斐波那契方程的直接表達。另一個函數創建並使用生成結果的緩存:這是一個顯着的優化,因爲評估fib(4),例如,否則將評估fib(2),比如3或4次,而fib(1)相當於再多一點。

+0

所以我寫的代碼實際上更高效? – Greg 2009-11-28 02:50:04

+0

是的!試試F(100)上的兩個函數。 – 2009-11-28 03:06:34

3

那裏有一個if語句。它被稱爲ternary operator

condition ? if true : if false 

如果$ i小於2返回$ I,否則返回F($ I-1)+ F($ I-2)。我假設遞歸函數調用不是你無法理解的東西,但如果它是一個遞歸斐波那契代碼的例子,如果你谷歌它。

相關問題