C++ Primzahlen ausgeben ohne Schleifen?
Wie könnte man in c++ Primzahlen ausgeben lassen, ohne schleifen zu benutzen?
Ist ein Schulprojekt :)
Also ich müsst ein Programm schreiben :)
Programmieren in der Schule halt in Codeblocks.
Also vielleicht findet man ja einen der Zeit un# Lust hat und es versteht. ;)
5 Antworten
Du kannst jede Schleife als Tailrecursion formulieren. und umgekehrt.
Aber genau deswegen und weil tailrecursion to loop automatisiert umgesetzt wird, ist eine Rekusion eigentlich auch eine Schleife, selbst wenn man es optisch nicht direkt sieht.
Warum zum Teufel darf man Rekursion aber keine Schleifen verwenden?
Hier ist mein Vorschlag:
static bool Test(int n, int t)
{
if(n < 2) return false;
if(t == 1) return true;
if((n % t) == 0) return false;
return Test(n, t-1);
}
static void Print(int n)
{
if(n < 2) return;
Print(n-1);
if(Test(n, n-1)) printf("%d\n", n);
}
Der Aufruf Print(20) gibt alle Primzahlen bis 20 aus.
Das war nur ein Schnellschuss, es geht aber bestimmt einfacher.
Ich würde eher andersrum durchlaufen, also Test (n, 2) im Print aufrufen und im Test dann bei t>n/2 true zurückgeben und Test(n, t+1) unten aufrufen, sollte schneller sein. Wobei es bei 1..20 egal ist.
void main(void) {
puts("Primzahlen: 3 7 11 17 23");
}
Ich dachte nur, weil Du so eine schöne Folge angegeben hast, wäre es schick gewesen, die ohne Lücken zu haben.
Ja, mithilfe einer Funktion die sich selbst aufruft. Stichwort Rekursion.
Rekursiv.
Du hast die 5 vergessen und die 19.