# Produkt der Zahlen im Array rekursiv berechnen



## hooked (15. Nov 2015)

Hey Leute,
ich habe hier noch eine Aufgabe, welche ich bis morgen Mittag abgeben muss. Leider bin ich total am verzweifeln und komm nicht weiter, zumal das Thema Arrays auch wirklich nicht meins ist. Hier die Aufgabe:

Implementieren Sie eine Methode double arrayProd(double[] array, int start). Sie soll das Produkt der Zahlen im Array ab dem Index start mit Hilfe von Rekursion berechnen und zurückgeben. Ein Aufruf mit 0 als zweitem Parameter berechnet also das Produkt aller enthaltenen Zahlen.

So weit bin ich im Moment:


```
double arrayProd(double[] array, int start)
    {
        if (start <= array.length)
        {
            double produkt = arrayProd(array, start)*arrayProd(array, start+1);
            return produkt;
        }
        return start;
      
    }
```

Ich hoffe ihr könnt mir den einen oder anderen Tipp geben damit ich da weiter komme.


----------



## InfectedBytes (15. Nov 2015)

Erstmal musst du auf < und nicht auf <= prüfen, da du sonst eine IndexOutOfBoundsException bekommst.
Außerdem musst du das produkt als produkt aus dem ArrayFeld der aktuellen Position und dem rekursiven Aufruf des Rests berechnen.
Zuletzt ist dein Rekursionsabbruch auch noch falsch, du sollst nicht einfach start zurückgeben, sondern den Wert davon im Array.


----------



## hooked (15. Nov 2015)

danke für die schnelle Antwort.
Dein erster Punkt ist klar und wurde schon verbessert. Bei den anderen bin ich mir bei der Umsetzung nicht ganz sicher...wie kann ich denn den rekursiven Aufruf des Rests angeben und wie gebe ich das richtige zurück ?


----------



## InfectedBytes (15. Nov 2015)

Der zweite Punkt bezieht sich hierauf:

```
double produkt = arrayProd(array, start)*arrayProd(array, start+1);
```
Denk mal nach was du hier machst. Der erste Aufruf _arrayProd(array, start)_ führt direkt zu einer endlosrekursion. Der zweite rekursive Aufruf ist korrekt.
Den ersten rekursiven Aufruf musst du halt durch den Wert an der aktuellen Array position ersetzen.

Wenn das Array bereits komplett durchlaufen wurde, gibst du einfach 1 zurück, da start eben bereits außerhalb des Arrays liegt.


----------



## hooked (15. Nov 2015)

Und wieder danke für die schnelle Antwort.
Mir ist schon klar was du mir sagen möchtest jedoch dachte ich, dass gerade durch die Kombination mit "start" und "start+1" das ganze durchlaufen wird und "start" dann quasi immer die aktuelle Position darstellt. Ich weiß wirklich nicht wie ich das umschreiben könnte


----------



## InfectedBytes (15. Nov 2015)

start ist quasi immer die aktuelle Position. Wenn du aber arrayProd immer mit dem gleichen Wert aufrufst, gibt es eine Endlosrekursion.
Durch den Aufruf von arrayProd(array, start+1) wird das array korrekt durchlaufen.
und den "aktuellen wert" erhälst du eben durch den direkten Arrayzugriff:

```
double produkt = array[start]*arrayProd(array, start+1);
```


----------



## hooked (15. Nov 2015)

Ahh so muss ich das schreiben. Ich muss dringen nochmal das Thema Arrays wiederholen -.-
Vielen Dank nochmal...du bist mein Held des Tages


----------



## InfectedBytes (15. Nov 2015)

kein problem^^


----------

