Pregunta

Prometo que esto no es tarea. Solo soy un principiante curioso.

¿Cómo funciona esto?

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

(escrito por alguien inteligente)

produce el mismo resultado que 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);
}

(mío)

Supongo que no consigo la sintaxis. ¿Hay una declaración if allí?

¿Fue útil?

Solución

El operador "? " Se denomina operador ternario. Se usa como: p1? P2: p3 dice que si p1 es verdadero, entonces p2, si no p3.

Otros consejos

Hay una sentencia if allí. Se llama operador ternario .

condition ? if true : if false

Si $ i es menos de 2, devuelve $ i, en caso contrario, devuelve f ($ i-1) + f ($ i-2). Supongo que la función recursiva de llamadas no es lo que está teniendo problemas para entender, pero si lo es, hay un montón de ejemplos de código de Fibonacci recursivo si lo busca en Google.

La primera función es la taquigrafía. Esto es lo que está haciendo

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

Por si es menos de dos, la función no tiene que ser recuperada. Si es 2 o mayor, la función se llama recursivamente.

El signo de interrogación es una expresión condicional:

x ? a : b

evalúa a a si x es verdadero, o b si es falso.

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

significa

function f($i)
{
    if $(i < 2)
        return $i;
    return f($i-1) + f($i-2);
}

Esa es una expresión directa de la ecuación de Fibonacci.

La otra función crea y utiliza un caché de resultados generados: esta es una optimización significativa ya que la evaluación de fib (4), por ejemplo, evaluaría fib (2) como 3 o 4 veces, y fib (1) bastantes más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top