Hi, ich hoffe, hier gibt's einige Experten, die mir weiterhelfen können.
Und zwar hab ich das Problem, dass immer wenn ich eine etwas größere rekursive Schleife programmiere, ich einen Stackoverflow bekomme.
Also, folgendes Problem:
Ich versuche das Springerproblem zu programmieren. Dafür hab ich ein schachBrett angelegt, deren Inhalt aus einzelnen schachFeld ern besteht. Jedes schachFeld hat ein array, welches auf von ihm erreichbare Felder verweist. Jetzt möchte ich zählen, wie viele Felder insgesamt von einem bestimmten Feld und all den benachbarten Feldern und deren Feldern usw. erreichbar sind. Idee: Ich hab eine Klasse programmiert, die einfach nur einen counter inkrementieren kann. Jetzt habe ich eine rekursive Abfrage programmiert:
In traced wird gespeichert, ob dieses Feld schon gezählt wurde. DAmit man keine Endlosschleife bekommt und in active wird gespeichert, ob das Feld überhaupt noch aktiv ist, das heißt, noch mitgezählt werden soll. Für kleine Felder fuktioniert das alles perfekt, aber bei größeren gibt's einen Stacküberlauf.
Muss ich das jetzt iterativ lösen? Ich hab mir mal sagen lassen, alles, was iterativ gelöste werden kann, geht auch rekursiv.
Genau das gleiche Problem hab ich auch wenn ich andere Probleme durch Backracking rekursiv löse. Ich mein, dass mein Uni-Prof mal gesagt hat, Java wäre so intelligent und schmeißt bei Rekursionen bereits beendete Instanzen, in denen nichts mehr passiert (aber die trotzdem zum Schluss einen neue Instanz starten) aus dem Speicher. Hier aber anscheinend nicht.
Mach ich hier grundsätzlich etwas falsch?
Ich würde dem Programm nur ungern mehr Speicher zuweisen wollen, weil dann alle, die das Programm ausführen wollen, auch den Speicher zur Verfügung stellen müssten.
Weiß jemand Rat?
Nico
Und zwar hab ich das Problem, dass immer wenn ich eine etwas größere rekursive Schleife programmiere, ich einen Stackoverflow bekomme.
Also, folgendes Problem:
Ich versuche das Springerproblem zu programmieren. Dafür hab ich ein schachBrett angelegt, deren Inhalt aus einzelnen schachFeld ern besteht. Jedes schachFeld hat ein array, welches auf von ihm erreichbare Felder verweist. Jetzt möchte ich zählen, wie viele Felder insgesamt von einem bestimmten Feld und all den benachbarten Feldern und deren Feldern usw. erreichbar sind. Idee: Ich hab eine Klasse programmiert, die einfach nur einen counter inkrementieren kann. Jetzt habe ich eine rekursive Abfrage programmiert:
Code:
public void calcTrace(zaehler z) {
z.inc();
traced = true;
for(int i = 0; i < neighbours.length; i++) if(!neighbours[i].traced && neighbours[i].active) neighbours[i].calcTrace(z);
}
Muss ich das jetzt iterativ lösen? Ich hab mir mal sagen lassen, alles, was iterativ gelöste werden kann, geht auch rekursiv.
Genau das gleiche Problem hab ich auch wenn ich andere Probleme durch Backracking rekursiv löse. Ich mein, dass mein Uni-Prof mal gesagt hat, Java wäre so intelligent und schmeißt bei Rekursionen bereits beendete Instanzen, in denen nichts mehr passiert (aber die trotzdem zum Schluss einen neue Instanz starten) aus dem Speicher. Hier aber anscheinend nicht.
Mach ich hier grundsätzlich etwas falsch?
Ich würde dem Programm nur ungern mehr Speicher zuweisen wollen, weil dann alle, die das Programm ausführen wollen, auch den Speicher zur Verfügung stellen müssten.
Weiß jemand Rat?
Nico