mein Kommilitone und ich sitzen gerade an Java und verzweifeln ein bisschen:
Es geht um folgendes:
Wir sollen über den Scanner Integer eingeben und die Summe dieser berechnen. Bei "0" soll das Programm beendet und die Summe ausgegeben werden. Dies mit Rekursion.
Wir haben dies bereits iterativ geschrieben:
Java:
importjava.util.Scanner;publicclassSum{staticScanner scanner =newScanner(System.in);publicstaticvoidmain(String[] args){int zahl =0;int summe =0;do{System.out.println("Bitte Zahlen eingeben (0 für Ende):");
zahl = scanner.nextInt();if(zahl !=0){
summe += zahl;}}while(zahl !=0);System.out.println (summe);}}
Für die Rekursion haben wir jetzt folgenden Entwurf, kommen aber nicht weiter:
Naja über den Scanner mal die Zahl einlesen.
Wenn diese != 0 ist, ist der Rückgabewert die Summe aus eingelesener dem Rückgabewert der Methode "sum(int, Scanner)"
Wenn diese ==0 ist dann einfach die zahl zurückgeben.
EDIT:
[ot]
Bitte für Java-Code die
Java:
-Tags verwenden, danke!Ich habe es bei euch leider geändert bevor ich den ganze Text gelesen hatte.Daher sind die [B]-Tags verschwunden.Wäre es möglich diese 2Zeilen die vorgegeben sind nochmals zu posten (ich glaube es waren die Methodensignaturen)?Entschuldigung nochmal![/ot]
Eine rekursive Methode bedeutet dass sich die Methode selber aufruft und das solange bis eine bestimmte Bedingung eintritt.
In diesem Fall ist die Bedingung wenn die eingelesen Zahl == 0 ist.
Das wäre schon mal das Grundgerüst für die rekursive Methode.
Wenn die eingelesene Zahl != 0 ist dann müsst ihr euch überlegen:
Was übergebe ich als Parameter? Addiere ich direkt die Werte und übergebe die Summe oder übergebe ich die eingelesene Zahl und addiere Parameter mit dem Rückgabewert.
Viele Menschen sehen Rekursionen als sehr schwierig an, obwohl das gar nicht so ist. Denn jede Rekursion ist gleich aufgebaut. Nämlich:
Java:
publicclassRecursiveSum{publicstaticvoidmain(String[] args){System.out.println(sum(9));}// Methodenrumpfpublicstaticintsum(int n){// Wichtigster Punkt: Abbruchbedingung!!!if(n ==0){return0;}// Die Rekursionreturn n +sum(n -1);}}
Bei eurem Programm ist das genau ähnlich. In Prosaform:
- 1. Aufruf aus der main-Methode von sum(0, scanner);
- Rekursionsbeginn -
- Lies die Zahl ein
- Ist die Zahl gleich 0?
- Wenn ja: Gib die Summe zurück
- Wenn nein: Ruf die Methode mit der neuen Summe auf und gib das Ergebnis der Methode zurück
- Rekursionsende -
- Zurück in der main-Methode