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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top