wie bei mir jo
mach ichs in der methode bekomm ich mal was anderes dafür schon vor 5000:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
sehr sehr interessant, schick mir mal deine .java datei per mail, dann schau ichs mir mal an und teste es bei mir
aber ob man dass array jetzt im konstruktor oder in der methode initialisiert dürfte doch egal sein? ich mein speicher brauchts ja so oder so dann…?!
- tobi
PS: mich würd ja interessieren, ob die fehler zur übung dazugehören, also die auszumerzen? oder ob das ein nicht bedachter nebeneffekt ist?
geschickt, halt mom noch ein fehler drin in der 2ten version
beantwortet (also die dritte version )
stellt sich nur die frage wohin die antworten wandern? in mein postfach scheinbar nicht ^^
jezaba
und was ist die lösung?
also wie gesagt ich versteh ja schon nicht, warum deine identische _rec bis MAXBETRAG läuft und meine nicht… selbst wenn ich alles auskommentiere und nur noch die _rec drinsteht läuft sie nur bis 84xx
er hat die Tabelle mit lauter 0en initialisiert, man muss sie aber mit zb UNKNOWN (-1) initialisieren!
ps. schick auch du mir mal deine datei!
jo thx, habs bekommen.
done
aber das mit der tabelle bringt mir ja immer noch nix für das _rec problem?! kann das vom System/OS/etc abhängen ab wann man den Error bekommt?
- tobi
nur wenn du weniger als 128 MB Speicher hast (was ich nicht glaube)
also deine Funktion läuft bei mir ohne Probleme, zeig mal bitte deine main, die war ja da net dabei!
public class Test {
private static int[] euro = {1,2,5,10,20,50,100,200,1000};
public static void main(String[] args) {
WechselMoeglichkeiten w = new WechselMoeglichkeiten(euro);
System.out.println(w.moeglich_dp(new Integer(args[0]), 8));
}
}
edit: irgendwie wär n chat effizienter Oo
und da bricht er bei dir sofort am anfang ab, wenn du den rec verwendest?
sowohl bei dp als auch bei rec mit zu hohen werten (bei dp etwas früher)
werte bis 6000 gehn bei beiden problemlos…
moeglich_dp geht bei mir ab 6550 schief. Irgendwo muss man doch die Stackgröße von Java einstellen können?
Ich hab gerade in moeglich_dp den Funktionsaufruf von muenzwert() ersetzt durch einen direkten array-Zugriff und schon gehts gut bis 8204 (Ergebnis: 472339103203848). Weitere Optimierungen fallen mir jetzt aber beim besten Willen nicht ein.
Das geht prima mit [m]time[/m], also z.B.:
# time java FooBar
real 0m0.313s
user 0m0.004s
sys 0m0.004s
Generell eines vorweg, ich habe den Thread jetzt nur überflogen: Dass die rekursive Methode irgendwo ihre Grenze hat, liegt daran, dass ein jeder rekursiver Methodenaufruf zusätzlichen (Stack-)Speicher belegt, der erst wieder freigegeben wird, wenn aus der Methode zurück gesprungen wird. Und irgendwann ist dann halt der Speicher mal zu Ende. Wann genau, hängt von verschiedenen Faktoren ab, JVM, Betriebssystem, physisch vorhandener Arbeitsspeicher.
Ja, kann man, und zwar mit [m]-Xss[/m] bzw. [m]-Xoss[/m], vgl. etwa http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp (Abschnitt “Stack Size”) oder http://tns-www.lcs.mit.edu/manuals/java-tools/java.html.