Stackoverflow-Abbruchbedingung

Status
Nicht offen für weitere Antworten.

java-anfaenger

Aktives Mitglied
Java:
public class Test_rek
{
    public double test(double epsilon){
        return 2*test(1,epsilon);
    }
    private static double test(int i, double epsilon){
    
    double b = 1.0 + 1.0/(4*i*i-1);
    
    if(b<epsilon){
        return 0;
    }
        return test(i+1,epsilon);
   
    }
}

wenn ich epsilon: 1.1 einsetze bricht er zwar ab, aber er liefert mir 0.0 zurück

wenn ich einen Wert unter 1.0 angebe dann: Stackoverflow Exception

Wie setze ich die Abbruch Bedingung bzw. den Basisfall richtig?
 
S

SlaterB

Gast
die Methode kann doch nur 0 zurückgeben oder eine Endlosschleife herbeiführen,
dann alle anderen returns außer der Rekursion liefern 0 zurück

die Frage läßt sich ohne Kenntnis deiner Ziele nicht beantworten,
natürlich kann man irgendwo
return b;
hinschreiben, das wäre wohl was anderes als 0
 

java-anfaenger

Aktives Mitglied
hi, danke für die Antwort

wenn b< epsilon ist, dann möchte ich das return 2*test(1,epsilon) zurückgegeben wird
wenn ich b<1 eingebe rechnet er mir pi richtig näherungsweise, bis die stackoverflow Meldung kommt...
 

Illuvatar

Top Contributor
Ich versteh zwar nicht, was du mit dem Code vorhast... aber dass ein epsilon <= 1.0 einen Stackoverflow Error gibt ist offensichtlich: Du berechnest b als 1 plus etwas positives. b ist also in jedem Fall größer as 1. Mit einem zu kleinen epsilon greift deine Abbruchbedingung also nie.
 

Painii

Bekanntes Mitglied
hi, danke für die Antwort

wenn b< epsilon ist, dann möchte ich das return 2*test(1,epsilon) zurückgegeben wird
wenn ich b<1 eingebe rechnet er mir pi richtig näherungsweise, bis die stackoverflow Meldung kommt...

Naja, die Methode will sich unendlich oft wieder aufrufen, irgendwann ist halt kein Platz mehr sich zu merken wieoft die Methode schon aufgerufen wurde...

Da double nur begrenzt ist müsstest du überprüfen ob der neu errechnete double-werte überhaupt anders ist als der alte...

edit:
nochmal dein problem:

Du rufst die Methode auf.
erste Möglichkeit: b<epsilon, rufe die Methode mit anderem Parameter auf.
zweite Möglichkeit: gib 0 zurück.

Eine ordentliche Zahl wird da nicht rauskommen können.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> wenn b< epsilon ist, dann möchte ich das return 2*test(1,epsilon) zurückgegeben wird

das *2 passiert am Ende, hat mir der Rekursion nix zu zun

> wenn ich b<1 eingebe rechnet er mir pi richtig näherungsweise, bis die stackoverflow Meldung kommt...

rechne nur den Term 1.0/(4*i*i-1) aus, wenn der kleiner epsilon ist (epsilon = 0.00..1) dann fertig,
allerdings musst du alle bisher berechneten Terme addieren, so wie es in der Formel steht

fange besser erstmal mit was einfachem an wie die Summe von 1 bis n oder n! rekursiv
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
K MergeSort Stackoverflow Java Basics - Anfänger-Themen 5
P Compiler-Fehler StackOverFlow Java Basics - Anfänger-Themen 4
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
M StackOverflow Problem Java Basics - Anfänger-Themen 9
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
L StackOverFlow, finde Grund nicht! Java Basics - Anfänger-Themen 5
O StackOverflow für Eingabewerte berechnen Java Basics - Anfänger-Themen 3
G StackOverflow Fehler Java Basics - Anfänger-Themen 3
Y stackoverflow fehler Java Basics - Anfänger-Themen 7
G Stackoverflow! Java Basics - Anfänger-Themen 14
S Stackoverflow Error Java Basics - Anfänger-Themen 5
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
C StackOverflow Error, objekte öfters erzeugen Java Basics - Anfänger-Themen 6
M StackOverFlow bei JOptionPane? Java Basics - Anfänger-Themen 23
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
P StackOverFlow - SocketTimeoutException Java Basics - Anfänger-Themen 12
frau-u StackOverflow - woher kommt es? Java Basics - Anfänger-Themen 7
D Konsoleneingabe mit Abbruchbedingung beenden Java Basics - Anfänger-Themen 11
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Variablen Abbruchbedingung: Dezimalzahl Java Basics - Anfänger-Themen 32
F Abbruchbedingung einer For-Schleife Java Basics - Anfänger-Themen 5
F Methoden Abbruchbedingung bei Rekursion Java Basics - Anfänger-Themen 2
M Abbruchbedingung- Iteratives Verfahren Java Basics - Anfänger-Themen 3
S Abbruchbedingung Java Basics - Anfänger-Themen 11
A Frage zur Abbruchbedingung Rekursion Java Basics - Anfänger-Themen 8
A for Schleife Abbruchbedingung Java Basics - Anfänger-Themen 9
C Schleife mit Abbruchbedingung Java Basics - Anfänger-Themen 6
S Wuerfeln über Schleifen, Abbruchbedingung Java Basics - Anfänger-Themen 6
M EInfaches Addieren mit Abbruchbedingung Java Basics - Anfänger-Themen 9
G Abbruchbedingung für Timer Java Basics - Anfänger-Themen 3
R Abbruchbedingung readObject (deserialisieren) Java Basics - Anfänger-Themen 31
G Abbruchbedingung Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben