Java Rekursion

Diskutiere Java Rekursion im Java Basics - Anfänger-Themen Bereich.
G

Gansa

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;
    }
}
 
krgewb

krgewb

 
MoxxiManagarm

MoxxiManagarm

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});
    }
}
 
T

temi

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.
 
T

temi

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);
    }
}
 
G

Gansa

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 :D
 
Thema: 

Java Rekursion

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben