B
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.)
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.)
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.