PHP: alguém pode explicar como esse código funciona? (Fibonacci)
Pergunta
Eu prometo isso não é lição de casa. Eu sou apenas um novato curioso.
Como faz isso:
function f($i){return $i<2?$i:f($i-1)+f($i-2);}
(escrito por alguém inteligente)
produzir o mesmo resultado como este
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);
}
(meu)
Acho que eu simplesmente não entendo a sintaxe. Existe uma declaração se lá dentro?
Solução
O operador "?" é nomeado ternário operador. Ele é usado como:? P1 p2:. P3 ele diz que se p1 é verdade, então P2, P3 outra
Outras dicas
Há uma declaração se lá dentro. É chamado um ternário operador .
condition ? if true : if false
Se $ i é inferior a 2 return $ i, else return f ($ i-1) + f ($ i-2). Estou assumindo a função de chamada recursiva não é o que você está tendo dificuldade para entender, mas se é que há uma tonelada de exemplos de código de Fibonacci recursiva se você google para ele.
A primeira função é um atalho. Aqui está o que ele está fazendo
if($i < 2) { // $i < 2 ?
return $i;
}
else { // :
return f($i-1)+f($i-2);
}
Por se é inferior a dois, a função não tem de ser recordado. Se é 2 ou superior, a função é recursivamente chamado.
O ponto de interrogação é uma expressão condicional:
x ? a : b
avaliada como a
se x
é verdade, ou b
se for falsa.
function f($i){return $i<2?$i:f($i-1)+f($i-2);}
meios
function f($i)
{
if $(i < 2)
return $i;
return f($i-1) + f($i-2);
}
Isso é uma expressão direta da equação de Fibonacci.
A outra função cria e usa um cache de resultados gerados: esta é uma otimização significativa desde avaliando FIB (4), por exemplo, de outra forma avaliar fib (2), como 3 ou 4 vezes, e FIB (1) muito poucos muito mais.