29. april 2002 - 17:54
Der er
10 kommentarer og 1 løsning
StackOverFlow
// denne metode laver StackOverFlow, hvorfor ? public static int power(int x, int y) { int res = 0; if(y == 0) res = 1; if(y % 2 == 1) { res = power(x, y - 1); res = x * res; } else { int tmp1 = x * x; //y = y / 2; res = power(x * x,y / 2); } return res; }//end power
Annonceindlæg fra Academic Work Denmark A/S
29. april 2002 - 17:56
#1
fordi den kalder sig selv rekursivt. Og JVM'ens stack derved løber tør for plads.
29. april 2002 - 17:58
#2
ved det, men hvor ligger fejlen, den skulle ifølge en lærer virke
29. april 2002 - 17:59
#3
hvad mener du ? Det er fejlen. rekursive metoder bruger altid stack som gale.
29. april 2002 - 18:01
#4
dvs at denne metode, selvom den er korrekt i princippet ikke duer LOL
29. april 2002 - 18:04
#5
baladen er at ligegyldigt hvad du sender til metoden, kalder den altid sig selv. I enhver rekursiv metode skal man kunne komme ud af metoden på et bestemt tidspunkt. jeg gætter på i din første if() skal du lave en return res; dette her virker: public static int power(int x, int y) { int res = 0; if(y == 0) { res = 1; } else if(y % 2 == 1) { res = power(x, y - 1); res = x * res; } else { int tmp1 = x * x; //y = y / 2; res = power(x * x,y / 2); } return res; }//end power p.s. din lærer trænger til briller eller en udskiftning :)
29. april 2002 - 18:06
#6
har testet den med power(2,2) som korrekt giver 4 og power(2,16) som giver 65536 som den skal.
29. april 2002 - 18:08
#7
det der gik galt i din kode var at ligegyldigt hvad du kaldte metoden med ville den ALTID kalde sig selv, altså den var havnet i en uendelig løkke. min rettelse gør at hvis y==0 så returnerer den 1, da x^0 altid giver 1. Derved slipper du ud af de rekursive kald.
29. april 2002 - 18:08
#8
tak Disky overvejede selv dette, ja han trænger vist til et eftersyn, faktisk er dette udarbejdet udfra et eksempel fra en tekst lavet til elever DOH, sejt gået endnu engang tak
29. april 2002 - 18:09
#9
Selv tak :) Det er altid dejligt når selv læreren ikke kan se fejlen (NOT)
29. april 2002 - 18:10
#10
jep, selv mine medstudenter, mente at jeg lavede fejl når jeg returnerede fra terminerings reglen DOOOH
29. april 2002 - 18:13
#11
int res = 0; if(y == 0) return res = 1; if(y % 2 == 1) { res = power(x, y - 1); res = x * res; } else { int tmp1 = x * x; //y = y / 2; res = power(x * x,y / 2); } return res; }//end power så er den hjemme
Kurser inden for grundlæggende programmering