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.

Woher ich das weiß:Berufserfahrung – 💻 Unternehmensberater (KI, Cloud, DevOps, ITSec & Dev.)

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.