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

这是怎么回事:

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语句吗?

有帮助吗?

解决方案

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

其他提示

那里有一个if语句。它被称为三元运营商

condition ? if true : if false

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

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

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

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

问号是条件表达式:

x ? a : b
如果 x 为true,则

计算 a ;如果为false,则 b

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)相当多更多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top