Springen naar inhoud

Java: overflow error..


  • Log in om te kunnen reageren

#1

triton456

    triton456


  • 0 - 25 berichten
  • 19 berichten
  • Gebruiker

Geplaatst op 24 september 2010 - 18:17

public class UpCount {
private long calc(int depth) {
if (depth == 0) return 1;
long cc = calc(depth - 1);
return cc + (depth % 7) + ((((cc ^ depth) % 4) == 0) ? 1 : 0);
}
public static void main(String[] args) {
UpCount uc = new UpCount();
System.out.println(uc.calc(11589));
}
}

Dit is de code. Telkens als ik um run geeft ie een OverFlow error, en ik heb geen idee hoe ik dit moet verhelpen. De code hoort een antwoord te geven in de vorm van een getal. Weet iemand dus waardoor de OverFlow error wordt veroorzaakt, en hoe de code kan worden aangepast, maar dat er nog steeds hetzelfde antwoord uit komt?

Alvast bedankt,

mvg
Triton456

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

ZVdP

    ZVdP


  • >1k berichten
  • 2097 berichten
  • VIP

Geplaatst op 24 september 2010 - 18:31

Ik krijg een stack overflow error.
Telkens er een oproep naar een method gebeurt, wordt er op de stack het oproepadres geplaatst, zodat wanneer de method afgelopen is de oproepende code weer verder kan gaan. Het oproepadres wordt dan weer van de stack gehaald.
Als je nu recursieve methods hebt, dan komt er voor elke oproep een nieuw adres op de stack; doordat de methods allemaal tegelijk nog actief zijn worden de adressen pas op het einde verwijderd.
Als er dan teveel recursieve oproepen zijn, geraakt de stack vol.

Er zijn waarschijnlijk wel manieren om de gereserveerde stack ruimte te vergroten te vinden op google.
Maar het zou misschien gewoon beter zijn om de code te herschrijven naar een loop ipv met een recursieve methode.
"Why must you speak when you have nothing to say?" -Hornblower
Conserve energy: Commute with a Hamiltonian

#3

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 24 september 2010 - 18:38

Je kan de stackgrootte inderdaad vergroten door bij het uitvoeren de parameters -xms op te geven.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures