このリンクの下にある再帰的アルゴリズムを実装しました。3d配列が10x10x10の場合、非常にうまく機能します。
私はそれを200x200x200アレイで実行しようとしていますが、Visual Studioは、無限の復活を使用している可能性があると言っています(私のプログラムは大丈夫だと確信しています)。それを処理する方法はありますか?[DebuggerNonUserCode]
再帰メソッドの直前に配置しようとしましたが、うまくいきませんでした。
言及するのを忘れました、それはVisualStudio2010です。
これが私のプログラムの再帰関数です。未訪問としてマークされているすべてのセルに対してこれを実行しています。
public static int tmp_lowest_floor = 0;
public static int tmp_maks_size = 0;
static void function1(Point[, ,] array, int pos_y, int pos_z, int pos_x) // recursive function
{
Point cell = array[pos_y, pos_z, pos_x];
if (cell.Visited == false && cell.IsCave)
{
cell.Visited = true; // changing to visited so we do not count anything for this cell anymore
tmp_maks_size++; // increasing for each cell in this cave (in this run)
if (tmp_lowest_floor < pos_y) { tmp_lowest_floor = pos_y; }
cell.FillNeighbourList(array, pos_y, pos_z, pos_x);// adds neighbours into cell's list (max 6) up, down, north, east, south, west
foreach (Point p in cell.neighbours) // max 6 times recursion in here (I know it sounds horrible, but once I check all the neighbours for a cell, I'll not have to check it ever again)
{
if (p != null)
{
if (p.IsCave == true && p.Visited == false)
{
function1(tablica, p.pos_y, p.pos_z, p.pos_x);
}
}
}
}
}
ps私はそれを反復的に行うことができることを知っていますが、宿題はそれが再帰的に行われなければならないと言っています