# Rekursion Summe vom Array



## mad.21 (21. Nov 2009)

Hallo,

ich soll die Summe aller ganzen Zahlen in einem Array rekursiv berechnen. Iterativ habe ich das ganze schon hinbekommen, komme aber bei der Rekursion nicht weiter. Bitte um Hilfe!


```
//**********Aufgabe1 - iterativ**********

public int summe_it (int [] a, int anz){
int fehler = -999;
int sum =0;
if (a.length<anz) return fehler;
else{
     for (int index=0;index<anz;index++){
            sum = sum + a[index];
        }
    }
return sum;    
}

//**********Aufgabe1 - rekursiv**********

public int summe (int []a, int anz){
if (a.length<anz) return -999;
int b;
int Index;
if (Index!=anz) return summe(a[0]+a[b]);
b++;
Index++;
}
```


----------



## Landei (21. Nov 2009)

"Magische" Zahlen wie -999 für Fehlerbehandling u.s.w. zu verwenden ist eine *ganz* schlechte Idee. Stattdessen einen Fehler werfen, etwa 
	
	
	
	





```
throw new IllegalArgumentException("Ungültiger Array-Index");
```
 oder ein 
	
	
	
	





```
assert(a.length>=anz);
```


```
public int summeHilf (int[] a, int sum, int index){
    if (index < 0 || index > a.length) throw new IllegalArgumentException("Ungültiger Array-Index");
    if (index == a.length) {
        return  sum;
    } else {
       return summeHilf(a, sum+a[index], index++);
    }
}

public int summe(int[] a) {
   return summeHilf(a, 0, 0);
}
```

Dazu ist anzumerken, dass das ganze deshalb so umständlich wird, weil man die Größe eines Array nicht ändern kann und ein Umkopieren zu aufwändig wird. Mit einer Liste sähe das alles viel einfacher aus:


```
public int summe(List<Integer> list) {
   if (list.isEmpty()) {
       return 0;
   } else {
       return list.remove(0) + summe(list);
   }
}
```


----------



## steff3 (21. Nov 2009)

```
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
	int a [] = new int []{1,2,3};
	
	System.out.println(summe(a,0));

	}
	
	public static int summe (int []a, int anz){
		if (a.length-1<anz) {		
			return  0;
		}
		else{
			
			return a[anz] + summe(a,anz+1);
		}
	}

}
```

das mit dem return 0;
naja, dass geht sicher alles besser, aber ein bisschen sollst du ja noch selber übrlegen 

EDIT: eine minute zu spät


----------

