Frage

Ich verspreche nicht Hausaufgaben ist. Ich bin nur ein neugieriger Anfänger.

Wie funktioniert das:

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

(geschrieben von jemandem smart)

produziert das gleiche Ergebnis wie die

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

(mein)

Ich nehme ich einfach nicht die Syntax. Gibt es eine if-Anweisung da drin?

War es hilfreich?

Lösung

Der Operator "?" wird ternärer Operator genannt. Es wird verwendet, wie: p1 p2: p3 es sagt, wenn p1 wahr ist, dann p2, sonst p3

.

Andere Tipps

Es gibt eine if-Anweisung in dort. Es nennt sich ein ternäre Operator rel="nofollow.

condition ? if true : if false

Wenn ich $ weniger als 2 return $ i, sonst Rückkehr f ($ i-1) + f ($ i-2). Ich bin die rekursive Funktionsaufruf unter der Annahme ist nicht das, was Sie nicht verstehen haben sollten, aber wenn es sie gibt Code eine Tonne Beispiele für rekursive Fibonacci ist, wenn Sie für Google es.

Die erste Funktion ist eine Abkürzung. Hier ist, was er tut

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

Mit dem, wenn es weniger als zwei, wird die Funktion nicht sein muß zurückgerufen. Wenn es 2 oder größer ist, wird die Funktion rekursiv aufgerufen.

Das Fragezeichen ist ein bedingter Ausdruck:

x ? a : b

ausgewertet a wenn x wahr ist, oder b wenn es falsch ist.

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

Mittel

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

Das ist ein direkter Ausdruck der Fibonacci-Gleichung.

Die andere Funktion erstellt und verwendet einen Cache von generierten Ergebnissen: Dies ist eine deutliche Optimierung ist fib da die Bewertung (4), zum Beispiel würde sonst fib bewerten (2) wie 3 oder 4 Mal, und fib (1) ganz wenig mehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top