Lernpfad:Rekursion in Java/Aufrufstapel: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „==Der Aufrufstapel== right|800px| thumb| Aufrufstapel der Methode Fakultät Intern werden die Methodenaufrufe…“)
 
Keine Bearbeitungszusammenfassung
 
(14 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
==Der Aufrufstapel==
{{Navigation}}
[[Datei:01_Rekursion_Aufrufstack_Fakultaet.png |right|800px| thumb| Aufrufstapel der Methode Fakultät]]
== Der Aufrufstapel ==
Intern werden die Methodenaufrufe einer rekursiven Methode auf einem Stapel gespeichert. Die Methoden, die ganz oben auf dem Stapel liegen, werden zuerst abgearbeitet. Danach wird das Resultat der Methode verwendet, um die darunterliegenden Methoden zu berechnen.
 
Intern werden die Methodenaufrufe einer rekursiven Methode auf einem ''Stapel'' (''Stack'') gespeichert. Die Methoden, die ganz oben auf dem Stapel liegen, werden zuerst abgearbeitet. Danach wird das Resultat der Methode verwendet, um die darunterliegenden Methoden zu berechnen.
 
Der Quelltext für die Methode <code>fakultaet</code> erzeugt den darunter dargestellten Aufrufstapel.
<syntaxhighlight lang="java" line="1">
public int fakultaet(int n) {
if(n < 2) {
return 1;
} else {
return n*fakultaet(n-1);
}
}
</syntaxhighlight>
[[Datei:01_Rekursion_Aufrufstack_Fakultaet.png|600px|center|Aufrufstapel der Methode <code>fakultaet</code>.]]


{{Aufgabe:Start}}
{{Aufgabe:Start}}
{| class="wikitable"
{| {{prettytable}}
! Die Methode z
! Die Methode z              
! Ergänzen Sie den Aufrufstapel zu dem Methodenaufruf z(5) .
! Ergänze den Aufrufstapel für z(5) .
|-
|-
| <syntaxhighlight lang="java" line="1" >
| <syntaxhighlight lang="java" line="1" >
public int z(x) {
public int z(x) {
  if (x > 1){
    if(x > 1) {
    return a + z(x - 2);
        return x + z(x - 2);
  }else{
    } else {
    return 1;
        return 1;
  }
    }
}
}
</syntaxhighlight>
</syntaxhighlight>
|  
|  
{|class="wikitable"
{| class="wikitable"
   |  
   |  
   |
   |
   |z(1)
   |z(1)
   |1
   |
   |  
   |  
   |-
   |-
Zeile 32: Zeile 45:
   |-
   |-
   | z(5)
   | z(5)
   | z(5)
   |  
   | z(5)
   |  
   | z(5)
   | z(5)
   | 5+4=9
   | 5+4=9
Zeile 39: Zeile 52:
  |}
  |}
|}
|}
{{Aufgabe:End}}
{{Lösung:Start}}
{{Lösung:Start}}
{|class="wikitable"
{|class="wikitable"
   |  
   |  
Zeile 62: Zeile 75:
  |}
  |}
{{Lösung:End}}
{{Lösung:End}}
{{Aufgabe:End}}

Aktuelle Version vom 13. November 2021, 16:51 Uhr

Der Aufrufstapel

Intern werden die Methodenaufrufe einer rekursiven Methode auf einem Stapel (Stack) gespeichert. Die Methoden, die ganz oben auf dem Stapel liegen, werden zuerst abgearbeitet. Danach wird das Resultat der Methode verwendet, um die darunterliegenden Methoden zu berechnen.

Der Quelltext für die Methode fakultaet erzeugt den darunter dargestellten Aufrufstapel.

public int fakultaet(int n) {
	if(n < 2) {
		return 1;
	} else {
		return n*fakultaet(n-1);
	}
}
Aufrufstapel der Methode fakultaet.
Icon Heft.png
Arbeitsauftrag
Die Methode z Ergänze den Aufrufstapel für z(5) .
public int z(x) {
    if(x > 1) {
        return x + z(x - 2);
    } else {
        return 1;
    }
}
z(1)
z(3)
z(5) z(5) 5+4=9
Lösung
z(1) 1
z(3) z(3) 3+1=4
z(5) z(5) z(5) z(5) 5+4=9