vielleicht kann mir dann noch einer erklären warum in meiner Methode aufeinmal das funktioniert was ich nicht gedacht hätte.
Code:
public float power (int x, int n)
{
if(n >= 0)
{
if(n!=0)
{
return x*power(x,n-1);
//return x*power(x,n-1);
}else{
return 1;
}
}else{
System.out.println("n is a negative number!");
}
return 1;
}
das return x*power(x,n-1)
hatte ich ausprobietr ohne damit zu rechnen das es funktioniert. Die Gleichung hatte ich ja bereits-
Kann mir einer erklären was GENAU Zeile fuer Zeile abläuft wenn sich dieses return aufruft ?
Ich bin bereits mit dem Debugger durchgegangen, aber hilft mir auch nicht viel weiter.
Meiner Logik nach passiert bei einer 2^3 eingabe fuer x, n das hier:
x(x(x*1))
2(2(2*1))
= 8
vorrausgesetzt das ist richtig, erklaert sich fuer mich immernoch nicht was die ganze Zeit mit dem N passiert, denn eigetlich muss er das ja benutzen um zu quadrieren.
Ich meine damit nehmen wir mal an ich habe dieses hier:
falls der Teiler durch den ich teilen möchte 11, also ungerade ist soll er nochmal mit x malnehmen nachdem er "(x^5) *(x^5)" gerechnet hat. Ist n ungerade also 10 soll er das nicht tun.
Meine Idee hier war eine if abfrage mit modulo die prüft ob ungerade, wenn ja dann das hier:
return x*power(x,n)*x
wenn nein dann ohne x. Meine Frage hier wieder WAS wird an der Stelle von "power(x,n) " eingesetzt wenn wir das als Rechnung sehen ?
ist das dann :
x * (x(x(x...*1) *x ?
Wenn ja, meine Frage hier wieder was ist mit dem N ?
Als nächstes Beispiel hätte ich dann :
Ich möchte eine rekursive FUnktion, diese Funktion soll bei jedem aufruf power(x, n/2) aufrufen. Das ansich ist ja kein Problem, aber ich verstehe nicht was genau da vor sich geht, denn ansich ruft der doch die Funktion jedesmal mit einem anderen N wert auf die er aber gar nicht quadriert ?
Um auf die Buchaufgabe zurueckzukommen:
Write an improved recursive version of power(x,n) that works by breaking n down into halves(where half of n=n/2), squaring power(x,n/2), and multiplying by x again if n was odd.
For example, x^11 = (x^5)*(x^5)*x, whereas x^10 = (x^5) * (x^5). Find a suitable base case to stop the recursion.
Falls mein wirres gequtsche da oben keinen Sinn gemacht hat dann ignoriert das einfach und bitte erklärt mir wie ihr diese Aufgabe interpretieren würdet und erklärt mir wie dieses return x*power(x,n) genau arbeitet(bitte schritt fuer schritt^^).
Meine bereits geschriebene Power Methode hab ich ganz oben angehängt.
ALLERBESTEN dank