我已经实现了可以在这个链接下找到的递归算法。当 3d 数组为 10x10x10 时,它工作得很好。
我试图让它运行 200x200x200 数组但是,Visual Studio 说我可能正在使用无限递归(我很确定我的 prog 没问题)。有什么办法可以处理吗?我试过把[DebuggerNonUserCode]
递归方法放在前面,但没有奏效。
忘了说,它是 Visual Studio 2010。
这是我程序中的递归函数。我正在为每个标记为未访问的单元格运行它。
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 我知道我可以用迭代的方式来做,但是,作业说它必须用递归来完成