Question

Je promets que ce n'est pas un devoir. Je ne suis qu'un novice curieux.

Comment cela:

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

(écrit par quelqu'un d'intelligent)

produit le même résultat que cela

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);
}

(le mien)

Je suppose que je ne comprends pas la syntaxe. Y a-t-il une déclaration if ici?

Était-ce utile?

La solution

L'opérateur "? " est nommé opérateur ternaire. Il est utilisé comme suit: p1? P2: p3 indique si p1 est vrai, alors p2, sinon p3.

Autres conseils

Il y a une déclaration if ici. C'est ce qu'on appelle un opérateur ternaire .

condition ? if true : if false

Si $ i est inférieur à 2, renvoyer $ i, sinon renvoyer f ($ i-1) + f ($ i-2). Je suppose que l'appel de fonction récursive n'est pas ce que vous avez du mal à comprendre, mais si c'est le cas, il existe une tonne d'exemples de code récursif de Fibonacci si vous le cherchez sur Google.

La première fonction est un raccourci. Voici ce qu'il fait

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

Si la valeur est inférieure à deux, la fonction n'a pas besoin d'être rappelée. Si la valeur est supérieure ou égale à 2, la fonction est appelée récursivement.

Le point d'interrogation est une expression conditionnelle:

x ? a : b

renvoie a si x est vrai, ou b s'il est faux.

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

signifie

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

C’est une expression directe de l’équation de Fibonacci.

L’autre fonction crée et utilise un cache de résultats générés: c’est une optimisation importante, car évaluer fib (4), par exemple, évaluerait fib (2) comme 3 ou 4 fois, et fib (1) plusieurs plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top