PHP: Quelqu'un peut-il expliquer comment ce code fonctionne? (Fibonacci)
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?
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.