我保证这不是功课。我只是一个好奇的新手。
这是怎么回事:
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语句吗?
答案 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)相当多更多。