2

Brauche Hilfe beim Verstehen von rekursiven Funktionen (Java)!!

Frage von StabiloBOSS StabiloBOSS

Hi. Ich bin dabei Java zu erlernen und bin gerade bein rekursiven Funktionen angelangt... hier habe ich zum Beispiel eine rekursive Funktion, die die Potenz einer Zahl berechnet:

static double potenz(double zahl, int pot) {
    if (pot == 1) {
        return zahl;
    } else return potenz(zahl, pot-1) * zahl;
}

Kann mir jemand Schritt für Schritt erklären wie die Funktion bei beispielsweise 2³ abläuft? Vorallem ab der Stelle, bei der die letzte Verschachtelung endet und die Zahl berechnet wird? Danke!

Fragen zu gleichen Themen finden

Antworten (2)

  • 1
    Hilfreichste Antwort ausgezeichnet vom Fragesteller
    Antwort von dirtbagbubble dirtbagbubble

    Die Grundidee ist, daß die Potenzzahl pot dazu genutzt wird, rückwärts zu zählen, um sie als Abbruchbedingung zu nutzen, und zwar sobald diese den Wert 1 hat.

    Anhand des Beispiels 2³ sieht das folgendermaßen aus. Ich numeriere die Rekursionsschritte begonnen mit 1, was der erste Funktionsaufruf vom Hauptprogramm aus ist, also potenz(2, 3).

    1. potenz(2, 3): return potenz(2, 2) * zahl; // Weil pot > 1

    2. potenz(2, 2): return potenz(2, 1) * zahl; // Weil pot > 1

    3. potenz(2, 1): return 2; // Weil pot == 1 ... hier geht es nicht mehr tiefer in die Rekursion hinein und man kehrt zurück in den vorigen Rekursionsschritt

    2.1 potenz(2, 2): return 2 * 2; // Weil potenz(2, 1) den Wert 2 zurückgibt

    1.1 potenz(2, 3): return 4 * 2; // Weil potenz(2, 2) den Wert 4 zurückgibt

    P.S.: Tut mir leid wegen der Formatierung. Gutefrage vermurkst mir den Text hier ganz ordentlich.

    Kommentar von StabiloBOSS StabiloBOSSStabiloBOSS

    Ok, danke für die Erklärung. Eine Frage habe ich allerdings noch... und zwar dient

    if (pot == 1) {
        return zahl;
    }
    

    nur dazu um bei potenz(2,1) den Wert 2 zu liefern, oder auch um letztlich den Wert von der potenzierten Zahl zu liefern?

    Kommentar von dirtbagbubble dirtbagbubbledirtbagbubble

    Nur um den Wert 2 zu liefern. Das return macht wirklich nur das, was an dieser Stelle bis zum Semikolon steht, es liefert also "zahl" zurück. Da sich "zahl" bei den ganzen Rekursivaufrufen niemals ändert, ist es dann auch 2 :-)

    Kommentar von StabiloBOSS StabiloBOSSStabiloBOSS

    Ok, danke dir!

  • 2
    Antwort von danae88 danae88


    -return (2,2) * 2
    --return (2,1) * 2
    --return (2) * 2
    -return (4) * 2
    8

    Das heißt du bekommst ganz zum Schluss 8 zurück.

    Ist das verständlich, wenn nicht Frag bitte nochmal :D.
    Ich weiß ich ibn nicht der beste Erklärer.

Diese Frage

Verwandte Fragen

Noch nicht den richtigen Rat gefunden?

Einfach und schnell viele hilfreiche Ratschläge von Deutschlands aktivster Ratgeber-Community erhalten!

Einfach und schnell einen Tipp erstellen und Ihren guten Rat mit anderen teilen!

Einfach und schnell ein Video hochladen und anschaulichen Rat an alle geben!

Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Rechtliche Hinweise finden Sie hier.