Hilfe bei Rekursion...

Bitte aktiviere JavaScript!
Hi Leute,
Java:
import java.util.Scanner;

public class zaghö {
   
    static int summiere(int counter, int obergrenze) {
        int ergebnis= 0;

       
        if (counter != obergrenze) {
            if ((counter-1) % 2 == 0) {
                System.out.println("Addiere");
                ergebnis = ergebnis + counter;
            } else {
                System.out.println("Subtrahiere");
                ergebnis = ergebnis - counter;
            }
        } 
        return ergebnis + (summiere(counter++, obergrenze));
    }
    public static void main(String[] args) {
        System.out.println("Zahl bitte:");
        Scanner scanner = new Scanner (System.in);
        int obergrenze = scanner.nextInt();
        int counter = 1;
       
        int ergebnis= summiere(counter, obergrenze);
       
       
        System.out.println(ergebnis);
       
        scanner.close();
    }



    }
Ich versuche hier, ohne Hilfe einer Schleife Zahlen zu addieren, jedoch weiss ich nicht genau, wie ich die Rekursion korrekt beenden kann. Damit ihr die Bedingungen korrekter versteht:
upload_2019-2-13_15-44-29.png

Ich bedanke mich für jeden Hinweis!
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Java:
return ergebnis + (summiere(counter++, obergrenze));
Der Fehler steckt in deinem counter++. Der Wert wird erst erhöht, nachdem die Methode zurück ist. Es wird also nicht der inkrementierte Wert in den Unteraufruf reingegeben. Deswegen rufst du deine Methode jedes Mal rekursiv mit counter = 0 auf.

Änder mal "counter++" zu "++counter" oder "counter +1" und teste das nochmal.

Eine gute IDE zeigt einem solche Fehler auch an ;)


Dazu kommt dann die fehlende passende Abruchbedingung. Die steht idR am Anfang der Methode und heißt in deinem Fall wohl
Java:
if (counter > obergrenze) return 0;
Deine zweite if-Abfrage counter!=obergrenze kannst du dann auch weglassen.
 
Zuletzt bearbeitet:
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben