PHP: Qualcuno può spiegare come funziona questo codice? (Fibonacci)
Domanda
Prometto che non si tratta di compiti a casa. Sono solo un novizio curioso.
Come funziona:
function f($i){return $i<2?$i:f($i-1)+f($i-2);}
(scritto da qualcuno intelligente)
produce lo stesso risultato di questo
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);
}
(la mia)
Suppongo di non avere la sintassi. È presente un'istruzione if?
Soluzione
L'operatore "? " è chiamato operatore ternario. È usato come: p1? P2: p3 dice se p1 è vero, quindi p2, altrimenti p3.
Altri suggerimenti
È presente un'istruzione if. Si chiama operatore ternario .
condition ? if true : if false
Se $ i è inferiore a 2 restituisce $ i, altrimenti restituisce f ($ i-1) + f ($ i-2). Suppongo che la chiamata alla funzione ricorsiva non sia ciò che stai riscontrando problemi di comprensione, ma se lo è ci sono un sacco di esempi di codice fibonacci ricorsivo se lo cerchi su Google.
La prima funzione è una scorciatoia. Ecco cosa sta facendo
if($i < 2) { // $i < 2 ?
return $i;
}
else { // :
return f($i-1)+f($i-2);
}
Se è inferiore a due, la funzione non deve essere richiamata. Se è 2 o maggiore, la funzione viene chiamata ricorsivamente.
Il punto interrogativo è un'espressione condizionale:
x ? a : b
valuta a
se x
è vero, oppure b
se è falso.
function f($i){return $i<2?$i:f($i-1)+f($i-2);}
mezzi
function f($i)
{
if $(i < 2)
return $i;
return f($i-1) + f($i-2);
}
È un'espressione diretta dell'equazione di Fibonacci.
L'altra funzione crea e utilizza una cache di risultati generati: si tratta di un'ottimizzazione significativa dal momento che la valutazione di fib (4), ad esempio valuterebbe altrimenti fib (2) come 3 o 4 volte e fib (1) piuttosto di più.