Stackoverflow verhindern

D

Dominik0806

Mitglied
Ich habe grade eine kleine App mit Java geschrieben, die prüft, ob eine Zahl eine Primzahl ist. Sie funktioniert auch aber wenn die Zahlen zu groß werden habe ich einen Fehler.
Ich weiß auch, dass es ein Stackoverflow ist, allerdings habe ich keile Möglichkeit gefunden, das in Java zu verhindern.
Und es sollte schon rekursiv sein, da es schneller ist als iterativ.

Java:
public boolean primzahlRekursiv(BigInteger z, BigInteger i /* ist zu beginn 2*/) {
   
        BigInteger z1 = new BigInteger("0");
        z1 = z.mod(i);

        if (z1.compareTo(new BigInteger("0")) == 0) {
            return false;
        } else if (i.compareTo(z.divide(i)) == 1) {
            return true;
        } else {
            return primzahlRekursiv(z, i.add(new BigInteger("1")));
        }

    }
 
Zuletzt bearbeitet:
L

LimDul

Top Contributor
Die banale Antwort - Stell von Rekursion auf eine iterative Lösung um.
Die ist nicht langsamer als rekursiv - im Gegenteil.

Die etwas sinnvollere Antwort: Nimm ein gescheites Verfahren zum testen von testen von Primzahlen, so reicht es unter anderem bis zur Wurzel der Zahl zu testen. Wenn du bis einschließlich der Wurzel keinen Teiler gefunden hast, wirst du danach auch keinen mehr finden.
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Vorneweg:
Ich persönlich finde den Code so wie er da steht recht schwer nachvollziehbar. Bitte ziehe diese Alternativen in Betracht:

Java:
public boolean primzahlRekursiv(BigInteger z, BigInteger i /* ist zu beginn 2*/) {
        if (z.mod(i).equals(BigInteger.ZERO)) {
            return false;
        }

        if (i.equals(z.sqrt().add(BigInteger.ONE))) {
            return true;
        }

       return primzahlRekursiv(z, i.add(BigInteger.ONE));
    }

Und es sollte schon rekursiv sein, da es iterativ schon bei kleineren Zahlen ca. 45 mal so lange dauert.
Du hast vermutlich nur vergessen die Schleife zu unterbrechen oder so. Langsamer sollte es nicht sein, der Code ist insgesamt doch der Gleiche.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Threads StackOverflow Allgemeine Java-Themen 12
M Eclipse Stackoverflow beim Einlesen von großen Bilder in kd Baum Allgemeine Java-Themen 15
S Binärer Suchbaum Stackoverflow Problem Allgemeine Java-Themen 4
S StackOverflow Allgemeine Java-Themen 7
H StackOverflow Fehler? Allgemeine Java-Themen 3
foobar [groovy]Stackoverflow bei invokeMethod Allgemeine Java-Themen 3
J Warum Stackoverflow oder Nullpointerexeption? Allgemeine Java-Themen 4
S StackOverflow Allgemeine Java-Themen 10
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
nico3000 Rekusrion mit Stackoverflow Allgemeine Java-Themen 7
0 StackOverflow abfangen Allgemeine Java-Themen 15
I Vector serialisieren: StackOverflow Allgemeine Java-Themen 13
T Fenster schließen verhindern Allgemeine Java-Themen 13
Z Überlauf des Javaspeichers verhindern Allgemeine Java-Themen 4
N Input/Output Verhindern, dass log-Einträge auf Console erscheinen Allgemeine Java-Themen 2
V JNI Call Crash verhindern (abfangen) Allgemeine Java-Themen 2
nrg Decompile verhindern Allgemeine Java-Themen 2
K HashMap sorting verhindern Allgemeine Java-Themen 10
H Mehrfachen Start des Programms verhindern Allgemeine Java-Themen 6
B Java OutOfMemory Error verhindern, Resourcenbedarf präventiv abschätzen? Allgemeine Java-Themen 19
T doppeltes Starten verhindern Allgemeine Java-Themen 14
B Exception bei leerem JTable verhindern Allgemeine Java-Themen 10
P Mehrere Instanzen der selben Appl. verhindern Allgemeine Java-Themen 12
J Wie die gleichzeitige Ausführung mehrerer Tasks trotz Multithreading verhindern? Allgemeine Java-Themen 2
T Mehrmaligen Start verhindern Allgemeine Java-Themen 19
Daniel_L Mehrfache Ausführung desselben Threads/Tasks verhindern? Allgemeine Java-Themen 4
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
V Zu schnelle Buttonklicks verhindern? Allgemeine Java-Themen 8
K Zeilenumbruch in Eclipse beim Codeformater verhindern Allgemeine Java-Themen 10
C Flimmern wegen eines Thread verhindern Allgemeine Java-Themen 8
M Acrobat Viewer Bean - EULA-Anzeige verhindern Allgemeine Java-Themen 4
G KeyListener: Wiederholtes Aufrufen von KeyPressed verhindern Allgemeine Java-Themen 3
reibi Doppelten Programmaufruf verhindern Allgemeine Java-Themen 11
S Verhindern das Programm mehrmals geöffnet wird Allgemeine Java-Themen 26
G Wie das Beenden eines Javaprogrammes verhindern? Allgemeine Java-Themen 6
F [TableModel] Doppelte einträge finden (bzw. verhindern) Allgemeine Java-Themen 3
P Mehrere Instanzen beim IE verhindern Allgemeine Java-Themen 11
thE_29 Escape Zeichen verhindern Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben