我是C#的新手,在编写面向这个奇怪问题的小功能时。在使用return语句时,我想返回到调用函数,但它在递归之前将我带到一个级别,并且永远不会退出递归函数。
我的代码如下:
private void findrel(String from, String to, List<RelAttr> relation)
{
String var;
List<RelAttr> temp = new List<RelAttr>();
for (int i = 0; i < relation.Count; i++)
{
if (Some Condition)
{
if (Another Condition)
{
//Do Something
paths.Add(Something);
return;
}
else
{
//Capture some value in var
paths.Add(Something);
//Move to Temp
temp.AddRange(relation);
//Remove Active Entry From Temp
temp.RemoveAt(i);
//Call with Newlist (temp)
findrel(var, to, temp);
}
}
}
//Remove Last Entry when recursion unwinds
paths.RemoveAt(paths.Count - 1);
}
我通常从其他功能调用此功能,例如:
findrel(from, to, relations);
我希望return语句返回到此函数,而不是递归之前的级别。有什么想法吗?
答案 0 :(得分:2)
return
语句将始终返回给调用者,当您使用递归时,这将包括返回上面的级别,并且不会跳回原始调用者。
如果你想要离开findrel
那么你将不得不做一些事情,比如返回一个标志,以便前一个级别知道它应该返回给它的调用者而不再进行任何处理。 / p>
因此,代码仍将从对findrel
的所有调用中解除,但您将有效地停止处理。
答案 1 :(得分:1)
通常使用递归函数,您会有一个终止条件,并导致返回函数的所有级别返回,这将返回给调用者。一个建议可能是返回一个布尔值,如果该值为false,则终止递归。您可以将该条件添加到循环的终止条件中,并且您的函数将退出所有级别。