2017-10-11 1 views
0

Anchor Falldefinition lautet wie folgt:Anchor Falldefinition in Rekursion

Der Wert der Funktion für einen oder mehrere Werte des Parameters angegeben wird.

Nun schauen wir uns die rekursive Fakultäts-Funktion einen Blick:

int fact(int n) 
{ 
    if (n == 0) 
     return 1; 
    else 
     return n * fact(n - 1); 
} 

Ich verstehe dieses Bit: „Der Wert der Funktion angegeben wird ...“ ich das; Wenn die Funktion den Ankerfall erreicht, wird einfach 1 zurückgegeben.

Was ich nicht verstehe ist, dass der Wert der Funktion "für einen oder mehrere Werte des Parameters angegeben" ist?

Wird über den Funktionsparameter oder die mathematischen Parameter gesprochen? Ich sehe einfach nicht, dass der Wert der Funktion für einen oder mehrere Werte der [function] -Parameter angegeben wird, wenn der Laufzeit-Stack aufgerufen wird.

+0

Thia Definition sieht für mich falsch aus, und ich denke, der Basisfall sollte 1 zurückgeben, andernfalls wird jeder Eingang Null zurückgeben. –

Antwort

0

Einige rekursive Funktionen haben mehr als einen Basisfall. Zum Beispiel hat die Fibonacci-Sequenz Werte für die Eingaben 0 und 1 angegeben und rekursiv für höhere Werte.

unsigned int fib(unsigned n) { 
    if (n == 0 || n == 1) { 
     return 1; 
    } else { 
     return fib(n-1) + fib(n-2); 
    } 
} 
+0

Ich verstehe das. Was ich wirklich nicht verstehe, ist .. wenn, sagen wir, fib (n-1) im induktiven Fall wird durch 1 ersetzt, nachdem der Ankerfall erreicht ist und wird "return 1 + fib (n-2)", können wir das sagen Der Funktionswert wurde für den Parameterwert? Mit anderen Worten, wird "fib (n-1) + fib (n-2)" im induktiven Fall in diesem Fall als Parameter angesehen? –

+0

Ich bin mir nicht sicher, was Sie fragen. Der einzige Parameter ist "n". Im induktiven Fall rufen Sie die Funktion erneut mit verschiedenen Parametern auf, 'n-1' und' n-2'. – Barmar

+0

Wenn das Lehrbuch "specified" angibt, bedeutet dies, dass ein vordefiniertes Ergebnis für diese Eingabe vorhanden ist, anstatt es mithilfe der Induktion zu berechnen. – Barmar

0

Dies bezieht sich auf funktionale Parameter. Dies ist eine statische Eigenschaft der Funktion. Es hat nichts mit Transientenstatus zur Laufzeit zu tun. "Wenn der Run-Time-Stack aufgerufen wird" ist kein Problem.

Das Konzept ist, dass jede Rekursion uns näher an eine Antwort bewegen muss. Das bedeutet, dass am Ende der Aufrufstruktur ein absoluter (nicht rekursiver) Wert vorhanden sein muss. Diese Antwort ist der Ankerfall.

Einige Prozesse haben nur einen Anker. Fibonacci hat zwei. Einige haben mehr, abhängig davon, wo der "Boden" für diesen bestimmten Prozess ist.