Hallo liebes Forum,
ich habe folgende Aufgabe gegeben:
Programmieren Sie eine zweifach rekursive Methode int summe(int[] v, int von, int
bis), die die Summe der Werte im Feld v von Index von bis Index bis berechnet. Ist der
Basisfall erreicht wird der zugehörige Wert zurückgeliefert, sonst wird der Indexbereich
in zwei möglichst gleich große Teilbereiche zerlegt, die Funktion ruft sich selbst für jeden
dieser beiden Teilbereiche auf und verarbeitet die Ergebnisse.
Programmieren Sie eine Applikation, die eine Folge ganzer Zahlen auf der Kommandozeile
übergeben bekommt, diese in einem Feld speichert, das komplette Feld mit der Methode
summe aufsummiert und das Ergebnis ausgibt.
Soweit so gut. Folgenden Code habe ich auch schon geschrieben und ich denke ich bin der Lösung sehr nahe. Jedoch scheint bei mir der Code nicht richtig aufzusummieren (Folge 1 2 3 4 funktioniert aber z.B. Folge 1 2 3 4 5 nicht) und ich bin langsam echt am verzweifeln. Wenn jemand einen Hinweis hat, wieso mein Code nicht genau das macht was er soll wäre ich sehr dankbar:
ich habe folgende Aufgabe gegeben:
Programmieren Sie eine zweifach rekursive Methode int summe(int[] v, int von, int
bis), die die Summe der Werte im Feld v von Index von bis Index bis berechnet. Ist der
Basisfall erreicht wird der zugehörige Wert zurückgeliefert, sonst wird der Indexbereich
in zwei möglichst gleich große Teilbereiche zerlegt, die Funktion ruft sich selbst für jeden
dieser beiden Teilbereiche auf und verarbeitet die Ergebnisse.
Programmieren Sie eine Applikation, die eine Folge ganzer Zahlen auf der Kommandozeile
übergeben bekommt, diese in einem Feld speichert, das komplette Feld mit der Methode
summe aufsummiert und das Ergebnis ausgibt.
Soweit so gut. Folgenden Code habe ich auch schon geschrieben und ich denke ich bin der Lösung sehr nahe. Jedoch scheint bei mir der Code nicht richtig aufzusummieren (Folge 1 2 3 4 funktioniert aber z.B. Folge 1 2 3 4 5 nicht) und ich bin langsam echt am verzweifeln. Wenn jemand einen Hinweis hat, wieso mein Code nicht genau das macht was er soll wäre ich sehr dankbar:
Java:
public class Rekursion{
public static int summe (int[] v, int von, int bis ) { //summe methode
if (von == bis){ //prüfung ob basisfall erreicht wurde
return v[von]; //wenn ja dann wird einfach der wert an der stelle von bzw. bis ausgegeben
}
else{
int mitte = (von + bis) / 2; //mitte des arrays wird bestimmt
int linkehaelfte = summe(v, von, mitte); //methode summe wird nocheinmal für linke hälfte und rechte hälfte durchgeführt (array wird halbiert)
int rechtehaelfte = summe(v, mitte + 1, v.length - 1); //rechte hälfte ist mitte +1 bis zum letzten eintrag des arrays was an stelle folge.length - 1 steht, da folge bei index 0 beginnt
return linkehaelfte + rechtehaelfte;
}
}
public static void main (String[] args){ //main mehtode, es wird davon ausgegangen dass man eine zahlenfolge aufsteigend sortiert bekommt
int[] folge = new int [args.length]; //array folge wird mit länge von kommandozeilenaeingabe deklariert
for (int i = 0; i < args.length; i++ ){ // array Folge soll mit Zahlen aus der Kommandozeile gefüllt werden,
folge[i] = Integer.parseInt(args[i]); // args wird in int umgewandelt vor dem abspeichern in array folge
}
for (int i = 0; i < folge.length; i++) {
System.out.println("Ihre Eingabe ist: " + folge[i]); // Array Folge soll ausgegeben werden als test
}
int sum = 0;
sum = summe(folge,0, folge.length -1); //gesamtes array folge (mit von als erster wert in array folge und bis als letzter wert in array folge) soll mit methode summe (oben definiert) aufsummiert werden
System.out.println("Summe ist " + sum); //Summe wird ausgegeben
}
}