1

我保证这不是家庭作业。我只是一个好奇的新手。

这是如何做到的:

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

4

5 回答 5

5

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

于 2009-11-28T02:44:37.937 回答
3

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

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

如果小于两个,则不必调用该函数。如果为 2 或更大,则递归调用该函数。

于 2009-11-28T02:47:04.593 回答
3

里面有一个if语句。它被称为三元运算符

condition ? if true : if false

如果 $i 小于 2,则返回 $i,否则返回 f($i-1) + f($i-2)。我假设递归函数调用不是你难以理解的,但如果你用谷歌搜索的话,会有大量递归斐波那契代码的例子。

于 2009-11-28T02:48:27.470 回答
2

问号是一个条件表达式:

x ? a : b

评估a是否x为真,或者b是否为假。

于 2009-11-28T02:45:19.090 回答
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) 则更多。

于 2009-11-28T02:47:57.220 回答