Schleifen in Rekursiv umwandeln?
wie wandle ich jede Schleife in eine rekursive Lösung um? Und wie mache ich das anderes rum?
2 Antworten
![](https://images.gutefrage.net/media/user/Dultus/1719823117497_nmmslarge__0_0_450_450_9e1367268a0c3376f63d5823c5a4b995.png?v=1719823118000)
Nachdenken. Keine Ahnung, was ich dir sonst als Antwort geben sollte. :o)
x = 0
while (x < 10)
x++
vs.
x = 0
methode(x)
void methode(x)
x++
if (x < 10)
methode(x)
Am Schluss ist x immer 10... Es kommt einfach extrem auf deinen Anwendungsfall an.
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Du brauchst wie bei einer Schleife eine Abbruchbedingung und einen Zustand, der (je nach Fall mitsamt weiteren Kontextdaten) weitergetragen wird (accumulator).
Beispiel: Die Zahlen eines Arrays sollen ausgegeben werden.
int[] numbers = { 4, 5, 6 };
int index = 0; // initial state
while (index < numbers.length) { // abort condition
System.out.print(numbers[index]); // action
++index; // update state
}
Der aktuelle Zustand wird durch die index-Variable gehalten. Die Abbruchbedingung ist, dass der Index kleiner als die Arraylänge sein muss.
Übertragen auf eine rekursive Funktion:
void printArray(int index, int[] numbers) {
if (index < numbers.length) { // abort condition
System.out.print(numbers[index]); // action
printArray(index + 1, numbers); // update and pass state
}
}
printArray(0, new int[] { 4, 5, 6 });
Bei einer Transformation von einer rekursiven Funktion (die einen Wert berechnet) in eine Schleife können Datenstrukturen wie bspw. Listen oder Stacks hilfreich sein, um Zwischenwerte zu sichern.