Schleifen in Rekursiv umwandeln?

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.