Rekursiver Primzahltest

ILoveJava

Grünschnabel
Aufzustellen ist ein Algorithmus für einen Primzahltest:
Der Benutzer gibt eine Zahl ein und das Programm soll prüfen ob es sich um eine Primzahl handelt.
Anforderungen an den Algorithmus: Rekursive Methode

integer x;
input( x)

boolean primzahltest ( integer a) {

if ( a % (a-1) ==0) {
test = false;
return test;​
} else {
return ( a--, primzahltest);​
}
}

Wäre das so ein rekursives Unterprogramm? Oder stimmt das generell überhaupt?
 

sheel

I love Asm
Hi

Es würde nicht nur dir helfen,
das Ganze in korrektem Java aufzuschreiben.
Ein return(x,z) mit Funktionsnamen bei z gibts nicht.
integer gibts nicht.
input gibts nicht.
Du verwendest eine nicht existierende Variable test.
...so:
Java:
boolean primzahltest(int a) {
    if((a % (a-1)) == 0)
        return false;
    return primzahltest(--a);
}

Nun...es ist rekursiv, da es sich selbst aufruft.
Aber da passt trotzdem einiges nicht.

Beschreib doch mal mit Worten, wie du überprüfen willst, was eine Primzahl ist.
Um 7 zu prüfen testest du, ob eine der folgenden Rechnungen 0 ergibt:
7%6
6%5
5%4
4%3
3%2
2%1
Logischerweise kommt nirgends außer bei 2%1 0 heraus.
Und wegen 2%1 sagst du dann, es ist keine Primzahl.

Deine Funktion kann übrigens schon mal nie "Ja, ist eine Primzahl" ergeben,
weil dafür ein "return true" nötig wäre.
Wenn im Code kein einziges true vorkommt...

Bitte keine Doppelposts.
 

timestamp

Mitglied Käsekuchen
Ich weiß ja nicht was du da programmierst, aber das ist definitiv nicht Java.
Außerdem ist der Algorithmus falsch.
Bitte außerdem Codetags (siehe meine Signatur benutzen)!

Java:
integer x; // Wie schon im letzten Thread von Dir, entweder Integer (groß geschrieben) oder int
input( x) // was macht das denn?
// Außerdem benutzt du x überhaupt nicht weiter -> sinnlos

boolean primzahltest ( integer a) { // integer: siehe oben
  if ( a % (a-1) ==0) { // Die Bedingung wird garantiert nie zutreffen (außer für a = 2)
    test = false;
    return test; // ließe sich auch direkt als return false; schreiben.
  } else {}
    return ( a--, primzahltest); // Ein Methodenaufruf sieht immer so aus: methodenname(parameter)
  // in diesem Fall also return primzahltest(a--);
  }
}

Java:
public boolean primzahltest(int a){
  return primzahltest(a, 2); // eigentliche rekursive Methode aufrufen
}
private boolean primzahltest(int a, int b){ // Methode wird überladen (google)
  // a ist unsere zu prüfende Zahl, b wird hoch gezählt
  // ToDo: Abbruch wenn b >= Wurzel (Math.sqrt(double x)) ist und nur mit Rest teilbar
  // ToDo: Abbruch wenn a durch b ohne Rest teilbar ist (Modulo-Operator %)
  // ToDo: Rekursionsaufruf mit b ums eins erhöht
}