Java: overflow error..

Moderators: jkien, Xilvo

Reageer
Berichten: 19

Java: overflow error..

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

Gebruikersavatar
Berichten: 2.097

Re: Java: overflow error..

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

Gebruikersavatar
Berichten: 4.810

Re: Java: overflow error..

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

Reageer