PHP:有人可以解释这段代码的工作原理吗? (斐波那契)

时间:2009-11-28 02:41:45

标签: php fibonacci

我保证这不是功课。我只是一个好奇的新手。

这是怎么回事:

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 个答案:

答案 0 :(得分:5)

运营商“?”被命名为三元运算符。它用作:p1?p2:p3它表示如果p1为真,则表示p2,否则为p3。

答案 1 :(得分:3)

第一个功能是速记。这就是它正在做的事情

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

如果小于2,则不必调用该功能。如果它是2或更大,则递归调用该函数。

答案 2 :(得分:3)

那里有一个if语句。它被称为ternary operator

condition ? if true : if false

如果$ i小于2,则返回$ i,否则返回f($ i-1)+ f($ i-2)。我假设递归函数调用并不是你理解的问题,但如果你有google的话就会有大量的递归斐波纳契代码的例子。

答案 3 :(得分:2)

问号是条件表达式:

x ? a : b

如果a为真,则评估为x;如果为假,则评估为b

答案 4 :(得分: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)相当多更多。