Rekursion: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
== Einführung == | == Einführung == | ||
'''Rekursion''' stammt aus dem Lateinischen und bedeutet "das Zurücklaufen" (Duden). Die Rekursion ist eine sich selbst aufrufende Funktion. In der [[Java]] Programmierung nennt man Funktionen Methoden. In diesem Kontext handelt es sich also um selbstaufrufende [[Methode|Methoden]]. Die Rekursion ist ein Werkzeug, um komplexe [[Algorithmus|Algorithmen]] zu entwickeln. Jeder [[Algorithmus]], der sich mit einer [[Schleife]] abbilden lässt, lässt sich auch mit Rekursion abbilden, aber nicht umgekehrt. | '''Rekursion''' stammt aus dem Lateinischen und bedeutet "das Zurücklaufen" (Duden). Die Rekursion ist eine sich selbst aufrufende Funktion. In der [[Java]] Programmierung nennt man Funktionen [[Methode|Methoden]]. In diesem Kontext handelt es sich also um selbstaufrufende [[Methode|Methoden]]. Die Rekursion ist ein Werkzeug, um komplexe [[Algorithmus|Algorithmen]] zu entwickeln. Jeder [[Algorithmus]], der sich mit einer [[Schleife]] abbilden lässt, lässt sich auch mit Rekursion abbilden, aber nicht umgekehrt. | ||
Wichtig bei der rekursiven Programmierung ist die Definition einer Abbruchbedingung in der sich selbstaufrufenden Funktion. Diese Abbruchbedingung wird auch '''Rekursionsanker''' genannt. Ohne Abbruchbedingung würde sich das rekursive Programm theoretisch unendlich oft selbst aufrufen. | Wichtig bei der rekursiven Programmierung ist die Definition einer Abbruchbedingung in der sich selbstaufrufenden Funktion. Diese Abbruchbedingung wird auch '''Rekursionsanker''' genannt. Ohne Abbruchbedingung würde sich das rekursive Programm theoretisch unendlich oft selbst aufrufen. | ||
Zeile 44: | Zeile 44: | ||
== Veranschaulichung == | == Veranschaulichung == | ||
[[Datei:Rekursion BlueJ.png|mini|Veranschaulichung einer Rekursion mit dem Debugger]] | [[Datei:Rekursion BlueJ.png|mini|Veranschaulichung einer Rekursion mit dem Debugger]] | ||
Veranschaulichen lässt sich die Rekursion am Beispiel der Fakultät auch an Hand der folgenden Darstellung. Ruft man die Methode <code>fakultät(4)</code> auf, so wird als Eingabeparameter n=4 übergeben. Dieser Aufruf ist Aufruf Nummer 1. Es folgen drei weitere Aufrufe der Methode <code>fakultät(n)</code>, um die Fakultät vom Wert 4 zu berechnen. Im vierten und letzten Aufruf hat die Variable n den Wert 1 angenommen. Die Abbruchbedingung ist erfüllt. Nun werden die Methodenaufrufe - symbolisiert durch die Pfeile - nacheinander abgearbeitet. Durch dieses nachträgliche Abarbeiten, wird die latinische Bedeutung des Wortes Rekursion ersichtlich: recursio = das Zurücklaufen. Die Reihenfolge kann in BlueJ auch anhand der Call Sequenz im Debugger nachvollzogen werden. | Veranschaulichen lässt sich die Rekursion am Beispiel der Fakultät auch an Hand der folgenden Darstellung. Ruft man die [[Methode]] <code>fakultät(4)</code> auf, so wird als Eingabeparameter n=4 übergeben. Dieser Aufruf ist Aufruf Nummer 1. Es folgen drei weitere Aufrufe der [[Methode]] <code>fakultät(n)</code>, um die Fakultät vom Wert 4 zu berechnen. Im vierten und letzten Aufruf hat die Variable n den Wert 1 angenommen. Die Abbruchbedingung ist erfüllt. Nun werden die Methodenaufrufe - symbolisiert durch die Pfeile - nacheinander abgearbeitet. Durch dieses nachträgliche Abarbeiten, wird die latinische Bedeutung des Wortes Rekursion ersichtlich: recursio = das Zurücklaufen. Die Reihenfolge kann in BlueJ auch anhand der Call Sequenz im Debugger nachvollzogen werden. | ||
[[Kategorie:Programmierung]] | [[Kategorie:Programmierung]] | ||
[[Kategorie:FI_I_SDM]] | [[Kategorie:FI_I_SDM]] | ||
[[Kategorie:AHR_I_Informatik_LK]] | [[Kategorie:AHR_I_Informatik_LK]] |