Selbst wenn ich die Codebeschreibung über die rekursive Funktion gelesen habe, die "mich selbst aufruft", konnte ich sie nicht einholen. Deshalb schrieb ich mit meiner eigenen Vorsicht einen Artikel mit dem Thema "ein grundlegendes Verständnis des Flusses der rekursiven Verarbeitung anstreben". Ich würde gerne ausprobieren. Lassen Sie uns darüber nachdenken, wie die Funktion mit dem folgenden einfachen Code ausgeführt wird.
1 def recursive(n)
2 p 'a'
3 p n
4 return 1 if n == 0
5 p n
6 n * recursive(n - 1)
7 p 'b'
8 p n
9 end
10
11 p recursive(5)
Bei der Ausführung ist es wie folgt.
Auf den ersten Blick war ich verwirrt, weil ich keine Ahnung hatte, warum sich die Zahl von 0 erhöhte. Während ich mir vorstelle, dass "eine Funktion eine Funktion enthält", werde ich versuchen, den Mechanismus einer rekursiven Funktion auszugeben, indem ich sie auf meine eigene Weise kaue, wie unten gezeigt.
(1) Funktionsausführung mit 5 als Argument → (2) p "a" bis p n in der 5. Zeile werden ausgeführt (* Natürlich wird der Postfix, wenn die Anweisungsrückgabe nicht ausgeführt wird) → (3) In der 6. Zeile wird eine eigene rekursive Funktion (4) ausgeführt. → Wie bei der (4) -Schleife werden die obigen (2) bis (3) bis zur rekursiven (0) ausgeführt. (* Zu diesem Zeitpunkt wurde "(weggelassen) ..." a ", 1, 1" verarbeitet. ") → (5) Wenn rekursiv (0) ausgeführt wird, wird der Postfix if-Anweisungsrückgabe ausgeführt, nachdem p "a" bis p n in der dritten Zeile ausgeführt wurden. Mit return endet die rekursive (0) Funktionsverarbeitung. → (6) Von hier zurückspulen? Rückläufig? Es wird ein Zustand wie. Die Ausführungsszene kehrt zu rekursiv (1) zurück, "b" in der 7. Zeile und p n (* n ist 1) in der 8. Zeile werden ausgeführt und rekursiv (1) endet. → (7) Die Ausführungsszene kehrt zu rekursiv (2) zurück, "b" in der 7. Zeile und p n (* n ist 2) in der 8. Zeile werden ausgeführt und rekursiv (2) endet. → (Ausgelassen bis rekursiv (4)) → (8) Die Ausführungsszene kehrt zu rekursiv (5) zurück, "b" in der 7. Zeile und p n (* n ist 5) in der 8. Zeile werden ausgeführt, rekursiv (5) endet und alle Funktionen sind abgeschlossen. → (9) Schließlich wird p rekursiv (5) (synonym mit p n) 5 ausgegeben und der Prozess endet. (* Wenn die p-Methode ausgeschlossen ist, werden die letzten 5 nicht ausgegeben.)
... Rekursive Funktionen sind persönlich ziemlich schwer zu verstehen. Ich mache mir ein wenig Sorgen darüber, ob es besser ist, die Anzahl der Plätze zu verwalten und sich daran zu gewöhnen. : verwirrt:
Recommended Posts