2Danke
ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
1227
1227
EMPFEHLEN
-
Hallo Leute,
habe mal wieder eine Frage. Wie kann man am betsen vorgehen wenn man eine rekursive Funktion in eine iterative Funktion umwandeln möchte? Habe hier ein Beispiel für eine rekursive Funktion:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
public static int sum(int n) { int result; if(n==0) { result = 0; }else { result = sum(n-1)+(n*n); } return result; }
Hier mal eine Lösung von mir zur iterativen Funktion, welche aber Falsch ist, da ich die variable result doch noch irgendwie speichern muss oder?
Code :1 2 3 4 5 6 7 8 9 10 11
public static int sumIterativ(int n) { int result =0; while(n>0) { result = n+(n*n); n--; } return result; }
Bin für jede Antwort dankbar
-
Hi Starbug,
eine allgemeine Lösung für das Umwandeln einer rekursiven Methode in eine iterative gibt es nicht; das ist in jedem Fall besonders - in diesem Fall muss dir klar sein, was genau zurückgegeben werden soll: die Summe aller Quadrate von 1 bis n. Dabei wird (rekursiv) zuerst die Summe von n^2 + sum (n-1) zurückgegeben, bis n = 1 ist; diese Summe ist dannd as Ergebnis. Deine iterative Methode ist fast richtig; du rechnest zwar für jedes einzelne n das Quadrat aus, lässt es aber aus, dies auch mit den schon vorher berechneten Quadraten zu summieren. Du müsstest also ausdieses hier machen:Code java:1
result = n+(n*n)
MfGCode java:1
result = result + (n*n)
-
17.08.11 14:41 #3
- Registriert seit
- Jun 2009
- Beiträge
- 868
Hi
allgemein wandelt man rekursive Funktionen in iterative F. um, indem man sich die Parameter ansieht, mit denen die rekursive F. sich selbst aufruft. Diese Parameter folgen meist einem Schema, in deinem Fall wird die Variable 'n' in jedem Schritt um 1 reduziert. Andere übliche Schemata sind:
– Konstante zur Zahl addieren, subtrahieren
– Zahl multiplizieren
– bei baumähnlichen Strukturen: Eine Ebene nach oben/unten gehen
Wenn du das Schema erkannt hast, kannst du direkt aus dem Aufruf der F. in sich selbst eine Schleifenvariable herauslesen und aus dem Schema z.B. einen Inkrement oder Dekrement machen.
In deinem Beispiel wäre das:
bis auf eine Kleinigkeit hat dein Code also gestimmt. Du hast nur vergessen, in Zeile 6 das vorherige Ergebnis dazu zu addieren.Code java:1 2 3 4 5 6 7 8
public static int sumIterativ(int n){ int result = 0; while(n>0){ result += n+(n*n); n--; } return result; }
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Danke das hat mir sehr weitergeholfen
-
17.08.11 15:07 #5SE Tutorials.de Gastzugang
Thread bitte als erledigt makieren.
Ähnliche Themen
-
Rekursiv
Von Chrissy_Love im Forum Java GrundlagenAntworten: 13Letzter Beitrag: 19.08.11, 18:11 -
eulerische zahl darstellen: iterativ und rekursiv
Von marvellous im Forum C/C++Antworten: 8Letzter Beitrag: 03.01.11, 14:45 -
Rekursiv!
Von yeronimo im Forum JavaAntworten: 11Letzter Beitrag: 25.11.08, 20:57 -
Iterativ/Rekursiv
Von Magges69 im Forum C/C++Antworten: 6Letzter Beitrag: 27.04.08, 10:18 -
Rekursiv
Von User Maik im Forum PHPAntworten: 7Letzter Beitrag: 17.12.03, 14:33





Zitieren
Login





