Java Rekursion

Gansa

Aktives Mitglied
Hallo, ich habe heute mittag schon einen Beitrag zu diesem Thema erstellt, jedoch wurde es leider nicht beantwortet. Es ging darum:

Ich habe ein Array mit integer Werten. Bei jedem Durchlauf müssen die benachbarten Elemente aufsummiert werden. Ich möchte den Vorgang solange wiederholen, bis nur noch ein Element übrig ist. Ich möchte dabei keine Schleifen verwenden. Ich habe in meinem Code das Problem, das ich irgendwie die Abbruchbedingung (denke ich mal) nicht hinbekomme. Es tut im wesentlichen das was es tun sollte, jedoch hört es nicht auf und ich möchte auch am Ende ein Ergebnis da stehen haben d.h das letzte Element soll nach jedem Durchlauf entfernt werden. Hier ist ein Beispiel wie der Output aussehen soll, folgend füge ich meine selbst geschriebenen Code hinzu. Ich bedanke mich jetzt schon mal Herzlich, wenn mir jemand bei meinem Problem weiter helfen kann.

Beispiel:
Eingabe: [1, 6, 4, 3, 2]
Erster Durchlauf: [1 + 6, 6 + 4, 4 + 3, 3 + 2]
Zweiter Durchlauf: [7 + 10, 10 + 7, 7 + 5]
... wiederholen, bis nur noch ein Element übrig bleibt.
Beispielhafte Ausgabe für das Array [7, 10, 7, 5]:
63
34 29
17 17 12
7 10 7 5

Java:
public class SumArray {

    public static void main(String[] args) {

        int[] a = {1, 6, 4, 3, 2};

        sum(a, 0, 0, a.length);

    }
    
    //next soll immer der Nachbar von vorne sein mit dem es addiert wird

    public static void sum(int[] a, int vorne, int next, int n) {
        if (vorne < next || n == 1) {
            return;

        } else {
            int j = up(a, vorne);
            sum(a, vorne + 1, vorne, n - 1);
            sum(a, 0, vorne, a.length);


        }

    }

    public static int up(int[] a, int vorne) {
        int i = vorne;
        int j = vorne + 1;

        a[i] = a[i] + a[j];

        return i;
    }
}
 
 
Java:
public class Rekursion {
    private static void printWall(int[] arr) {
        if (arr.length == 1) return;

        int[] a = new int[arr.length - 1];

        for (int i = 0; i < arr.length - 1; i++) {
            a[i] = arr[i] + arr[i+1];
        }

        printWall(a);
        for (int i : a) {
            System.out.print(i + "\t");
        }
        System.out.println();
    }

    public static void main(String... args) {
        printWall(new int[] {1, 6, 4, 3, 2});
    }
}
 
Java:
public class Rekursion {
    private static void printWall(int[] arr) {
        if (arr.length == 1) return;

        int[] a = new int[arr.length - 1];

        for (int i = 0; i < arr.length - 1; i++) {
            a[i] = arr[i] + arr[i+1];
        }

        printWall(a);
        for (int i : a) {
            System.out.print(i + "\t");
        }
        System.out.println();
    }

    public static void main(String... args) {
        printWall(new int[] {1, 6, 4, 3, 2});
    }
}
Ich möchte dabei keine Schleifen verwenden.
 
Mein Versuch:
Java:
public class Main {

    public static void main(String[] args) {

        int[] arr = {1, 6, 4, 3, 2};

        printSum(arr);
    }

    public static void printSum(int[] arr) {
        printSum(arr, 0);
        print(arr, 0);
    }

    private static void printSum(int[] arr, int i) {
        if (i >= arr.length-1) return;

        int[] res = new int[arr.length-1];

        sum(arr, i, res);

        printSum(res, i);

        print(res, 0);
        System.out.println();
    }

    private static void sum(int[] arr, int i, int[] res) {
        if (i >= arr.length-1) return;

        res[i] = arr[i] + arr[i+1];

        sum(arr, i+1, res);
    }

    private static void print(int[] arr, int i) {
        if (i >= arr.length) return;

        System.out.print(arr[i] + " ");

        print(arr, i+1);
    }
}
 
Mein Versuch:
Java:
public class Main {

    public static void main(String[] args) {

        int[] arr = {1, 6, 4, 3, 2};

        printSum(arr);
    }

    public static void printSum(int[] arr) {
        printSum(arr, 0);
        print(arr, 0);
    }

    private static void printSum(int[] arr, int i) {
        if (i >= arr.length-1) return;

        int[] res = new int[arr.length-1];

        sum(arr, i, res);

        printSum(res, i);

        print(res, 0);
        System.out.println();
    }

    private static void sum(int[] arr, int i, int[] res) {
        if (i >= arr.length-1) return;

        res[i] = arr[i] + arr[i+1];

        sum(arr, i+1, res);
    }

    private static void print(int[] arr, int i) {
        if (i >= arr.length) return;

        System.out.print(arr[i] + " ");

        print(arr, i+1);
    }
}
Viele Dank, ich glaube ich bin da viel zu kompliziert an die Sache ran gegangen 😀
 

Neue Themen


Zurück
Oben