Stackoverflow verhindern

Diskutiere Stackoverflow verhindern im Allgemeine Java-Themen Bereich.
D

Dominik0806

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

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

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.
 
Thema: 

Stackoverflow verhindern

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben