如何正确递归此对象列表?

时间:2018-06-29 15:49:23

标签: c# recursion

我有一个Room对象列表,我想设置一个递归函数来为其分配一些值。以下是Room对象的相关属性:

class Room
{
    int Room_Number;
    string N;
    string S;
    string E;
    string W;
    int X;
    int Y;
    int Z;
    bool isRecursed;
}

对于每个Room对象,如果相关出口(N,S,E,W)转到另一个房间,则该字符串值将是相邻房间的Room_Number。如果在该方向上没有出口,则该值为“ 0”。我也有一个功能GetChildren(Room room)。该函数返回所有尚未递归的有效相邻房间的列表,并根据转换为笛卡尔平面的基本方向设置其X,Y,Z属性(例如:room.N!=“ 0” add将子房间添加到列表中,然后将Y值增加1,room.S!=“ 0”,然后将Y值减去1,依此类推。)由于某种原因,我的递归函数似乎永远不会结束。它会继续在各个房间中循环,这似乎是无限的时间,并且永远不会完成。这是递归函数:

void RecurseRoom(Room r)
{
    r.isRecursed = true;
    foreach(Room child in GetChildren(r))
    {
        RecurseRoom(r);
    }
}

有人可以建议我如何定义一个起始房间,并为其指定初始(X,Y,Z)=(0,0,0),然后递归所有子房间,直到完整地图完整?任何在正确方向上的帮助或指导都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

为防止无限递归,您需要检查r.isRecursed,例如:

void RecurseRoom(Room r)
{
    if(r.isRecursed) return;
    r.isRecursed = true;
    foreach(Room child in GetChildren(r))
    {
        RecurseRoom(r);
    }
}