Rekursion loesen, wie am besten!



  • Hi, ich versuche im Moment das Prinzip der Rekursion zu verstehen! Vlt hat jemand einen Tipp, wie man solche Aufgaben am besten loest. Wuerde genau wissen was das Programm genau tut. Ich habe folgende Ueberlegungen angestellt:

    Bei input 1 wird die Zahl 1 dem Arrayfeld 0 zugewiesen.
    Bie input 2 wird die rekursion a[a-1] + sum(a, n-1) aufgerufen und erhalte:

    Fuer das Arrayfeld 1 = 1

    Wie kann ich das Programm zum laufen bringen, damit ich das besser nachvollziehen kann?

    Danke im voraus! 👍

    int sum(int[], int n)
    {
    if(n==1)
        return a[0];
    else
        return(a[a-1] + sum(a, n-1);
    
    }
    


  • Leider fehlt die Angabe, was das Ziel der Aufgabe ist.

    Aus dem fehlerhaften Code und den wirren Überlegungen kann ich selber nicht viel heraus lesen.

    Fehlt vielleicht noch Verständnis zur Syntax an sich?
    http://de.wikipedia.org/wiki/Java-Syntax#Eindimensionales_Feld



  • Es geht hier um die funktion sum! n kann eine x beliebige Zahl sein. Nehmen wir mal die Zahl 5.



  • Dein Code ist einfach falsch. Er sollte vielleicht so aussehen:

    int sum(int[] a, int n) {
      if (n == 1)
        return a[0];
      else
        return a[n-1] + sum(a, n-1);
    }
    

    oder besser

    int sum(int[] a, int n) {
      if (n == 0)
        return 0;
      else
        return a[n-1] + sum(a, n-1);
    }
    

    Zum Verständnis: IMHO bringt es nicht viel, sich den Ablauf genau anzugucken. Das ist viel zu kompliziert und bringt keine Einsichten. Ich gehe immer so vor:
    Du hast ein großes Problem (die Summe eines Arrays mit n Einträgen zu bestimmen.)

    1. Du überlegst dir, wie du das einfachste Problem dieser Art lösen kannst. (Die Summe eines Arrays mit 1 Element ist dieses Element. Noch einfacher: Die Summe eines leeren Arrays ist 0.)
    2. Du überlegst dir, wie du dein Problem verkleinern kannst und tust dann so als hättest du das kleinere Problem schon gelöst. (Die Summe eines n-elementigen Arrays ist die Summe eines n-1-elementigen Teilarrays plus das Element, was du dafür rausgenommen hast.)
      Fertig.

Anmelden zum Antworten