Frage zur Rekursion (Übung 7)

Philipp S.
Neuling
Neuling
Beiträge: 2
Registriert: 22. Aug 2012 13:36

Frage zur Rekursion (Übung 7)

Beitrag von Philipp S. » 22. Aug 2012 13:42

Hallo,

ich habe eine Frage zu Übung 7 und der dortigen Additionsaufgabe mit Rekursion. Um zwei Zahlen a und b miteinander zu addieren habe ich folgende Funktion geschrieben:

Code: Alles auswählen

public static int add(int a, int b) {    
        
        if(b >= 0) {
            a = a + 1;
            b = b - 1;
            System.out.println("a = : " + a); // zum prüfen von a
            add(a,b);
        } 
        return a;
        
    }
}

Abgesehen von der eingeschränkten Funktionalität bei Sonderfällen: Durch die System.out.println() habe ich mir jeweils a zurückgeben lassen und daran gesehen, dass a auch ordentlich hochgezählt wird. Aber wieso habe ich dann am Ende bei der Rückgabe von a ein falsches Ergebnis?

Beispiel mit a = 5 und b = 3 zählt er a bis 8 hoch (Kontrolle durch die Ausgabe bei jedem Durchgang), aber der Rückgabewert der Funktion ist dann 6.

Suche verzweifelt nach meinem Fehler.

Schonmal danke für euer Feedback,

Philipp

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Frage zur Rekursion (Übung 7)

Beitrag von Owyn » 22. Aug 2012 13:48

Grundsätzlich ist es selten eine gute Idee, eine Methode, die einen Rückgabewert hat aufzurufen, ohne sich um selbigen zu kümmern.

Bei Ihnen wird die Methode add immer a+1 zurückgeben. Die rekursiven Aufrufe haben darauf keinen Einfluss, da die Rückgabe der Methode im Nirvana verschwindet - entweder zwischenspeichern mit z.B. "int x = add(a, b);" oder direkt im return-Statement verwenden.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Benutzeravatar
mmi1991
Computerversteher
Computerversteher
Beiträge: 349
Registriert: 20. Okt 2011 18:46
Wohnort: Hattersheim

Re: Frage zur Rekursion (Übung 7)

Beitrag von mmi1991 » 22. Aug 2012 13:48

Code: Alles auswählen

public static int add(int a, int b) {    
        
        if(b >= 0) {
            a = a + 1;
            b = b - 1;
            a = add(a,b);
        } 
        return a;
        
    }
}
So sollte es gehen ;)
Ophasentutor SoSe 2014, WiSe 2015/16
Alle Angaben wie immer ohne Gewähr

Benutzeravatar
mmec
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 203
Registriert: 7. Sep 2011 17:59
Wohnort: Darmstadt

Re: Frage zur Rekursion (Übung 7)

Beitrag von mmec » 22. Aug 2012 13:51

Hallo Phillip,

du willst add(a,b) zurückgeben, nicht a. Schreib einfach return add(a,b) statt return a und mach den anderen Aufruf von add weg.

Grüße, Johannes
FC SEEMOO No.1

Philipp S.
Neuling
Neuling
Beiträge: 2
Registriert: 22. Aug 2012 13:36

Re: Frage zur Rekursion (Übung 7)

Beitrag von Philipp S. » 22. Aug 2012 14:17

Super, besten Dank für die schnellen Antworten.

Hab es jetzt verstanden und entsprechend korrigiert :) :idea:

Viele Grüße

Philipp

Antworten

Zurück zu „Archiv“