Meine Frage:
Hallo Leute kann mir jemand vielleicht mit der Umstellung der Methode helfen
public static int tuwas2(int n) {
return (n==0) ? 0 : 1+2*tuwas2(n-1);
}
Vielen Dank im Voraus
Meine Ideen:
Ich hab es so versucht aber klappt leider nicht
public static int tuwas2ite(int n) {
int erg=1;
for(int i=1;i<n;i++) {
erg+=2*i;
}
return erg;
}
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
Also, ich würde erstmal das erg mit 0 initialisieren.
Dann ist die Rechnung doch eine andere: Da wo in der Iteration tuwas2(n-1) in der Formel steht, das ist ja in der Schleife noch der vorhergehende Wert von erg. Du kannst also einfach schreiben:
code:
1:
erg = 1+2*erg
Das i kommt ja so gar nicht mehr in der Formel vor.
Was passiert dann?
Gruß
Marco
13.08.2017 12:28
zitrone unregistriert
Vielen Dank für die Antwort, ich hab das so gemacht und es funktioniert
public static int tuwas2ite(int n)
{
int erg=0;
while(n>0)
{
erg=1+2*erg;
n--;
}
return erg;
}
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
Ich weiß nicht, warum Du jetzt unbedingt rückwärts zählen willst. In diesem speziellen Fall funktioniert das zwar auch, aber das muss so nicht immer richtig sein.
Du solltest eher das hier verwenden:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
public static int tuwas2ite(int n) {
int erg=0;
for(int i=0;i<n;i++) {
erg = 1+2*erg;
}
return erg;
}
Im Allgemeinen kann man eine Rekursion immer so auflösen: Man implementiert einen eigenen Stack. pusht die Werte drauf, so wie die Funktion rekursiv auch aufgerufen wird und am Ende der Rekursion arbeitet man den Stack wieder ab. Bei Deinem Bsp. ist es so, dass die Funktion immer wieder rekursiv mit n-1 aufgerufen wird. Wenn ich also den Stack anschaue, wenn der Rekursionsabbruch stattfindet (wenn also die Funktion mit dem Wert 0 aufgerufen wird), dann habe ich alle Zahlen von 0 bis n auf dem Stack.
Im Anschluss wird die Rekursion zurück abgearbeitet und zwar mit den Zahlen von 0 bis n (und zwar in dieser Reihenfolge und nicht so wie Du es gemacht hat von n nach unten, überleg Dir das nochmal genau!)