Rekursionen: Unterschied zwischen den Versionen
Pwania (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Eine weitere Form der Schleife, also des wiederholten Aufrufs eines Programmteils, kann dadurch erfolgen, dass eine Prozedur sich selbst aufruft und somit eine…“) |
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
Eine weitere Form der Schleife, also des wiederholten Aufrufs eines Programmteils, kann dadurch erfolgen, dass eine Prozedur sich selbst aufruft und somit eine Wiederholung erwirkt. Wenn Sie eine Rekursion einsetzen, erzeugen Sie eine Endlosschleife (siehe [[Fehlermeldungen#28: Nicht genügend Stapelspeicher|Laufzeitfehler 28: Nicht genügend Stapelspeicher]]) und müssen daher eine sehr klare Abbruchbedingung schaffen oder nur in einem klar definierten Fall den erneuten Aufruf bewirken. ;Beispiel Im folgenden Beispiel sollen mehrere aufeinander folgende Leerzeichen auf ein einziges reduziert werden. Würde man das Ersetzen von doppelten Leerzeichen nur einmal durchführen, würden zum Beispiel von drei aufeinander folgenden Leerzeichen immer noch zwei Leerzeichen übrig bleiben (die Replace-Funktion ersetzt die ersten beiden mit einem einzelnen Leerzeichen, kehrt jedoch nicht nochmal zurück und erkennt, dass dadurch immer noch zwei Leerzeichen hintereinander stehen). In der Funktion 'SingularizeSpaces' wird also zuerst das Ersetzen von doppelten Leerzeichen durchgeführt. Danach wird geprüft, ob immer noch doppelte Leerzeichen vorhanden sind. Ist dies der Fall, ruft die Funktion sich selbst mit dem schon einmal vorbereiteten Text auf. Am Schluss wird der Text als Rückgabewert der Funktion zurückgegeben. Public Function SingularizeSpaces(ByVal strText As String) strText = Replace(strText, " ", " ") If InStr(strText, " ") > 0 Then strText = SingularizeSpaces(strText) End If SingularizeSpaces = strText End Function | Eine weitere Form der Schleife, also des wiederholten Aufrufs eines Programmteils, kann dadurch erfolgen, dass eine Prozedur sich selbst aufruft und somit eine Wiederholung erwirkt. | ||
Wenn Sie eine Rekursion einsetzen, erzeugen Sie eine Endlosschleife (siehe [[Fehlermeldungen#28: Nicht genügend Stapelspeicher|Laufzeitfehler 28: Nicht genügend Stapelspeicher]]) und müssen daher eine sehr klare Abbruchbedingung schaffen oder nur in einem klar definierten Fall den erneuten Aufruf bewirken. | |||
;Beispiel | |||
Im folgenden Beispiel sollen mehrere aufeinander folgende Leerzeichen auf ein einziges reduziert werden. Würde man das Ersetzen von doppelten Leerzeichen nur einmal durchführen, würden zum Beispiel von drei aufeinander folgenden Leerzeichen immer noch zwei Leerzeichen übrig bleiben (die Replace-Funktion ersetzt die ersten beiden mit einem einzelnen Leerzeichen, kehrt jedoch nicht nochmal zurück und erkennt, dass dadurch immer noch zwei Leerzeichen hintereinander stehen). | |||
In der Funktion 'SingularizeSpaces' wird also zuerst das Ersetzen von doppelten Leerzeichen durchgeführt. Danach wird geprüft, ob immer noch doppelte Leerzeichen vorhanden sind. Ist dies der Fall, ruft die Funktion sich selbst mit dem schon einmal vorbereiteten Text auf. Am Schluss wird der Text als Rückgabewert der Funktion zurückgegeben. | |||
Public Function SingularizeSpaces(ByVal strText As String) | |||
strText = Replace(strText, " ", " ") | |||
If InStr(strText, " ") > 0 Then | |||
strText = SingularizeSpaces(strText) | |||
End If | |||
SingularizeSpaces = strText | |||
End Function |
Version vom 10. Oktober 2018, 15:27 Uhr
Eine weitere Form der Schleife, also des wiederholten Aufrufs eines Programmteils, kann dadurch erfolgen, dass eine Prozedur sich selbst aufruft und somit eine Wiederholung erwirkt.
Wenn Sie eine Rekursion einsetzen, erzeugen Sie eine Endlosschleife (siehe Laufzeitfehler 28: Nicht genügend Stapelspeicher) und müssen daher eine sehr klare Abbruchbedingung schaffen oder nur in einem klar definierten Fall den erneuten Aufruf bewirken.
- Beispiel
Im folgenden Beispiel sollen mehrere aufeinander folgende Leerzeichen auf ein einziges reduziert werden. Würde man das Ersetzen von doppelten Leerzeichen nur einmal durchführen, würden zum Beispiel von drei aufeinander folgenden Leerzeichen immer noch zwei Leerzeichen übrig bleiben (die Replace-Funktion ersetzt die ersten beiden mit einem einzelnen Leerzeichen, kehrt jedoch nicht nochmal zurück und erkennt, dass dadurch immer noch zwei Leerzeichen hintereinander stehen).
In der Funktion 'SingularizeSpaces' wird also zuerst das Ersetzen von doppelten Leerzeichen durchgeführt. Danach wird geprüft, ob immer noch doppelte Leerzeichen vorhanden sind. Ist dies der Fall, ruft die Funktion sich selbst mit dem schon einmal vorbereiteten Text auf. Am Schluss wird der Text als Rückgabewert der Funktion zurückgegeben.
Public Function SingularizeSpaces(ByVal strText As String) strText = Replace(strText, " ", " ") If InStr(strText, " ") > 0 Then strText = SingularizeSpaces(strText) End If SingularizeSpaces = strText End Function