2009-11-28 60 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)。我假设递归函数调用不是你无法理解的东西,但如果它是一个递归斐波那契代码的例子,如果你谷歌它。