tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Teaxtor
  • 1 Beitrag von genodeftest
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
1227
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    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
     

  2. #2
    Teaxtor Teaxtor ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Beiträge
    3
    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 aus
    Code java:
    1
    
    result = n+(n*n)
    dieses hier machen:
    Code java:
    1
    
    result = result + (n*n)
    MfG
    starbug bedankt sich. 

  3. #3
    genodeftest genodeftest ist offline Mitglied Brillant
    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:
    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;
    }
    bis auf eine Kleinigkeit hat dein Code also gestimmt. Du hast nur vergessen, in Zeile 6 das vorherige Ergebnis dazu zu addieren.
    starbug bedankt sich. 
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  4. #4
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Danke das hat mir sehr weitergeholfen
     

  5. #5
    SE Tutorials.de Gastzugang
    Thread bitte als erledigt makieren.
     

Ähnliche Themen

  1. Rekursiv
    Von Chrissy_Love im Forum Java Grundlagen
    Antworten: 13
    Letzter Beitrag: 19.08.11, 18:11
  2. Antworten: 8
    Letzter Beitrag: 03.01.11, 14:45
  3. Rekursiv!
    Von yeronimo im Forum Java
    Antworten: 11
    Letzter Beitrag: 25.11.08, 20:57
  4. Iterativ/Rekursiv
    Von Magges69 im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 27.04.08, 10:18
  5. Rekursiv
    Von User Maik im Forum PHP
    Antworten: 7
    Letzter Beitrag: 17.12.03, 14:33