Methoden rekursive Methoden

rafikl97

Mitglied
Hey,
ich beschäftige mich momentan mit rekursiven Methoden.. das prinzip bei einfachen rekursiven methoden (Fakultät) hab ich verstanden.. jetzt bin ich auf diese methode gestoßen und verstehe nicht, wie sie funktioniert mit den komma zwischen n und k.. mir ist bewusst wie die rechnung funktioniert und das von der methode sowohl eine double als auch eine int variable erwartet werden aber wie schafft die methode es dann diese funktion auszurechnen :/ ?

Java:
public class Rekursion {

    public static double a(double n, int k){
        if (k == 0) {
            return 1;
        } else if(k < 0) {
            return 1.0/a(n,(-1)*k);  // ?
        }
        else {
            return n*a(n,k-1);
        }

        }

    public static void main(String[] args) {
        System.out.println(a(3,4));
    }
}


Gruß rafi
 
Visualisiere dir doch die rekursiven Aufrufe z.B. durch Ersetzung:
Code:
a(3, 4) = 3 * a(3, 3)             | else
        = 3 * 3 * a(3, 2)         | else
        = 3 * 3 * 3 * a(3, 1)     | else
        = 3 * 3 * 3 * 3 * a(3, 0) | k == 0
        = 3 * 3 * 3 * 3 * 1
Der Fall (k < 0), den du ansprichst, wird ja erstmal durch das Beispiel a(3, 4) garnicht betreten, weil ja k nie kleienr als Null sein wird.
Wenn dem aber der Fall ist, also du explizit mit einem negativen Wert startest, wird halt einmal der Kehrwert von dem restlichen rekursiven Aufruf für wieder positive Werte von k berechnet, also n^(-k).
 
Hier siehst du die Methodenaufrufe und ihre Rückgabewerte (die Zeit läuft dabei von oben nach unten)
Code:
a(3, 4)
        a(3, 3)
                a(3, 2)
                        a(3, 1)
                                a(3, 0)
                                1
                        3
                9
       27
81
 
wie kommts dazu das die zahlen die methoden sozusagen "verlassen" so wie dus darfgestellt hast..
Ich denke, Du hast das gleiche Problem wie viele andere auch und gehst davon aus, dass die Parameter der Methode nur einmal existieren und dann innerhalb der rekursiven Methodenaufrufe wiederverwendet und dort ggf. angepasst werden. Das ist nicht der Fall. Stell Dir einfach vor, dass jeder Methodenaufruf seine eigenen Parameter bekommt.
 
Das ginge eigentlich nur mit Parametern welche nicht unveränderlich wären - und das hinwieder würde nicht zur Rekursion passen. 😉
 
oh man hatte einen dummen denkfehler der mir beim verfassen der antwort selbst aufgefallen ist^^ mich hat nur das komma irrirtiert inzwischen bin selbst ich drauf gekommen 🙄 danke für eure antworten!
 

Zurück
Oben