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?

È stato utile?

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ù.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top