Schleifen in Rekursiv umwandeln?
wie wandle ich jede Schleife in eine rekursive Lösung um? Und wie mache ich das anderes rum?
2 Antworten
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.
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.