# Rekursion



## hooked (9. Nov 2015)

Hey Leute,
habe hier folgende Aufgabe zum Thema Rekursion zu lösen, weiß aber nicht genau wie ich die Aufgabe lösen, geschweige denn Anfangen soll.
Ich hoffe ihr könnt mir Helfen.
Hier die Aufgabe:

Betrachten Sie das hier angegebene Java-Programm. Es verwendet eine while-Schleife, um das Muster *--*--*--* auf dem Bildschirm auszugeben.

int i=0;
while (i<10) {
if (i % 3 == 0)
System.out.print("*");
else
System.out.print("-");
i = i+1; }

Schreiben Sie das Programm so um, dass es keine Schleife, sondern stattdessen Rekursion verwendet. Ansonsten sollen die Funktionsweise und die Struktur des Programms gleich bleiben. Implementieren Sie hierzu eine rekursive Methode void print(int i). Ein Aufruf von print(0) soll das gewünschte Muster ausgeben. 

Es gibt noch eine Unteraufgabe die wie folgt lautet:

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. 

Auch hierfür brauch ich Hilfe.

Ich danke schonmal im voraus


----------



## stg (9. Nov 2015)

Und was hast du bisher versucht? Wo genau kommst du nicht weiter?

Hilfe kannst du gerne bekommen, aber du musst schon selbst mitmachen.


----------



## Flown (9. Nov 2015)

Ich hab mal ein Tutorial über Rekursion geschrieben vielleicht hilft dir das dein iterativen Prozess rekursiv umzumodellieren: HIER.


----------



## hooked (15. Nov 2015)

Ja das hat auf jeden Fall geholfen.
Aber dennoch komme ich nicht weiter.
Hier mein aktueller Code:

```
void print(int i) {
        if (i < 10)
        {
            if (i % 3 == 0)
                System.out.print("*");
            else
                System.out.print("-");
            i=print(i-1);
        }

    }
```

bei i=print(i-1) zeigt mir Eclipse einen Fehler, aber ich verstehe nicht wieso.
Denn an dieser Stelle will ich ja, dass i um print(i-1) runtergesetzt wird und die Methode dann nochmal mit dem neuen Wert durchläuft.


----------



## InfectedBytes (15. Nov 2015)

print ist vom Typ void und gibt dementsprechend nichts zurück. Dementsprechend geht i=print(...) natürlich nicht


----------



## hooked (15. Nov 2015)

aber wir sollen ja die Methode "void print(...)" implementieren. Das heißt ich darf das void nicht verändern...wie soll ich das dann sonst machen, dass ich die Methode in der Methode nochmal aufrufe ?


----------



## InfectedBytes (15. Nov 2015)

du sollst die methode einfach nur aufrufen. also nur print(...)


----------



## hooked (15. Nov 2015)

Sehr cool...hat geklappt, aber ich musste aus dem i-1 ein i+1 machen, da es sonst unendlich lange lief.
Dankeschön 
Habe aber immer noch Probleme mit dem Aufgabenteil b)
Da bin ich Momentan so Weit:

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

Leider liefert er mir da nicht das gewünscht Ergebnis. Mein Problem ist auch, dass Arrays so gar nicht mein Thema sind -.-


----------

