Rekursion in Iterativ umstellen |
13.08.2017, 00:55 | Auf diesen Beitrag antworten » | |||||
zitrone | Rekursion in Iterativ umstellen 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; } |
|||||
|
||||||
13.08.2017, 12:28 | Auf diesen Beitrag antworten » | |||||
as_string | 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:
Das i kommt ja so gar nicht mehr in der Formel vor. Was passiert dann? Gruß Marco |
|||||
13.08.2017, 17:22 | Auf diesen Beitrag antworten » | |||||
zitrone | 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; } |
|||||
13.08.2017, 22:32 | Auf diesen Beitrag antworten » | |||||
as_string | 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:
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!) Gruß Marco |
|||||
Anzeige | ||||||
|
||||||
14.08.2017, 17:36 | Auf diesen Beitrag antworten » | |||||
zitrone | Okay alles klar, vielen Dank für die Hilfe |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |
|