私はいくつかのスタックオーバーフローの問題を抱えています。うまくいけば、誰かが私に非再帰的でない解決法についていくつかの洞察を与えることができます。再帰的配列トラバーサルの問題
Ident[][] map = ...
private int explore(Ident item, int xcoord, int ycoord) {
if ((map[xcoord][ycoord] == null) || !map[xcoord][ycoord].equals(item))
return 0;
map[xcoord][ycoord] = null;
int sumX, sumY, counter = 1;
item.translate(xcoord, ycoord);
for (int y = -1; y <= 1; y++)
for (int x = -1; x <= 1; x++) {
sumX = x + xcoord;
sumY = y + ycoord;
if (((y != 0) || (x != 0)) && (sumX >= 0) && (sumX < map.length) &&
(sumY >= 0) && (sumY < map.[0].length))
counter += explore(item, sumX, sumY);
}
}
}
return counter;
}
このメソッドには、Identオブジェクト、ターゲットIdentおよび配列内の開始位置の2次元配列が与えられます。それは再帰的に配列 を通過し、Identが占める連続領域の大きさを数えます。また、入力されたIdent項目をその中央に配置します。
マップ配列をループし、null以外の要素についてexploreメソッドを呼び出すことで、その領域を中心としたIdentアイテムの配列を構築できます。
小さいマップ以外のものでは、スタックがオーバーフローすることがわかります。
誰も同じタスクを実行する別の方法がありますか?または私が1つを見つけるのを助けるためのいくつかの洞察?
それは時間がかかりましたので、十分に近いです。 – Andrew