C++ Primzahlen ausgeben ohne Schleifen?


25.02.2022, 15:40

Also ich müsst ein Programm schreiben :)


25.02.2022, 19:04

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.


iQa1x  26.02.2022, 22:14

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.

0
void main(void) {
  puts("Primzahlen: 3 7 11 17 23");
}

ohwehohach  25.02.2022, 15:52

Du hast die 5 vergessen und die 19.

0
ohwehohach  25.02.2022, 15:54
@VanLorry

Ich dachte nur, weil Du so eine schöne Folge angegeben hast, wäre es schick gewesen, die ohne Lücken zu haben.

0
Von Experte ohwehohach bestätigt

Ja, mithilfe einer Funktion die sich selbst aufruft. Stichwort Rekursion.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
Von Experte MrAmazing2 bestätigt

Rekursiv.