Java Rekursion


Goaew

Grünschnabel
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;
    }
}
 

Yaslaw

n/a
Moderator
Du machst das viel zu kompliziert. Wozu dauernd die Positionen berechnen und mitgeben.
Ich habe schnell ein Beispiel in VBA geschrieben (ist einfacher um schnell ein Test zu machen). Das Konzept kannst du nach Java übernehmen

Visual Basic:
Public Function aSum(iArr)
    Dim cnt&: cnt = UBound(iArr)                    'Letzter Index ermitteln (Grösse-1)
    If cnt > 0 Then
        iArr(cnt - 1) = iArr(cnt) + iArr(cnt - 1)   'Die 2 letzten Werte zusammenzählen und in die 2t letzte Position schreiben
        ReDim Preserve iArr(cnt - 1)                'Die Arraygrösse um 1 vermindern
        d iArr                                      'Konsolenausgabe
        aSum = aSum(iArr)                           'Return
    Else
        aSum = iArr                                 'Return
    End If
End Function
Test
Code:
aSum array(1,2,3,4)
<Variant()>  (
    [#0] => <Integer> 1
    [#1] => <Integer> 2
    [#2] => <Integer> 7
)
<Variant()>  (
    [#0] => <Integer> 1
    [#1] => <Integer> 9
)
<Variant()>  (
    [#0] => <Integer> 10
)