Wie Programmiert man Sieb des Eratosthenes in c++ ohne Schleifen?

1 Antwort

Die Aufgabenstellung verrät es schon: Mit Rekursion. Das heißt, es gibt eine Funktion, die sich selbst immer wieder aufruft.

Ein Beispiel:

void count(int start, int end) {
  if (start > end) {
    return;
  }

  std::cout << start << std::endl;
  count(++start, end);
}

int main() {
  count(0, 5);
  return 0;
}   

Die Ausgabe wäre 0-5.

Nun vergleiche diesen Code einmal mit dem, bei dem eine Schleife stattdessen eingesetzt wird:

int start = 0;
int end = 5;

while (start <= end) {
  std::cout << start << std::endl;
  ++start;
}

Du findest dieselben Bestandteile.

  • Die Hauptaktion (Ausgabe via std::cout)
  • Eine Abbruchbedingung (Prüfung, ob start > end)
  • Eine Zustandsänderung (++start), die dafür sorgt, dass je Wiederholung ein anderes Ergebnis ermittelt wird

Der Unterschied liegt darin, dass die rekursive Lösung mit dem Funktionsaufruf ihre nächste Wiederholung selbst ankurbeln muss. Damit diese über den aktuellen Zustand der Variablen Bescheid weiß, werden ihr die jeweiligen Werte als Argumente mitgegeben.

Du kannst die Aufgabe also zuerst mit Schleifen lösen und anschließend schauen, wie du den Lösungsweg zu einen rekursiven Algorithmus umwandelst.

Bezüglich des Sieb des Eratosthenes hilft der Wikipedia-Artikel.