Bauinfo Rekursion?

2 Antworten

Das ist eine Rekursionsformel, also eine Funktion, die sich selbst aufruft. Nehmen wir als Beispiel

Rekursion(6,3) --> Rekursion(6-1,3+1) --> Rekursion(6-2,3+2) --> Rekursion(6-3,3+3) und hier bricht die Rekursion ab, weil 6-3 nicht größer ist als 3+3. Nach de Abbruch landet man jeweils bei print(a), zuerst wird das innerste dargestellt, nälich 6-2 = 4, dann geht es zurück, dann 6-1 und es geht wieder zurück, dann 6 und jetzt zurück ist man ganz draußen aus der Rekursion.

Anderes Beispiel:

void IchRufeMichAuf(){
     IchRufeMichAuf()
     return;
}

läuft endlos bzw. bis der Stack voll ist. Besser:

void IchRufeMichAuf(){
     if(a>1)IchRufeMichAuf(a-1)
     return;
}

Wenn man IchRufeMichAuf(5) aufruft, dann geht er mit 5 rein, dann mit 4 in sich selbst, dann mit 3, mit 2, aber nicht mit 1, bei 1 wird returniert (aus Stufe a=2), dann returniert (aus Stufe a=3) bis man ganz draußen ist.

Hallo.

Es gibt rekursive und iterative Schleifenformen. Hierbei siehst du eine rekursive Form der Wiederholung. Dabei wird die Funktion so lange aufgerufen, bis die Abbruchbedingung erreicht ist.

Bei dir wird die Funktion so lange aufgerufen, bis a nicht mehr größer b ist. Siehe

if a>b:

Dabei wird mit jedem Aufruf a um 1 reduziert und b und 1 erhöht. Siehe

rekursion(a-1, b+1)

So bald dann die Funktion vollständig durchgelaufen ist, wird der Wert von a ausgeben und zwar da, wo a nur noch um 1 größer ist. Die Ausgabe sollte also mit dem Aufruf rekursion(6, 3) dann

5
6

lauten. Stell es dir wie folgt vor:

  • Die Funktion wird mit a=6 und b=3 aufgerufen
  • Die Funktion wird dann mit a=(6-1)=5 und b=(3+1)=4 aufgerufen
  • Die Funktion wird schließlich mit a=(6-1-1)=4 und b=(3+1+1)=5 aufgerufen
  • Hierbei ist a nicht mehr größer als b, also wird rekursiv zurückgegangen und ausgeben. Dabei war a bei dem Durchlauf davor 5 und beim Start 6.

Wenn du also

rekursion(8,3)

aufrufen würdest, bekämst du welche Ausgabe? Genau

6
7
8

Dazu stell dir vor wie sich a und b verhalten:

  • 8 vs 3
  • 7 vs 4
  • 6 vs 5
  • 5 vs 6 -> Abbruch, bei den 3 darüber wird das a ausgegeben