我编写了以下递归函数,以使用邻接矩阵计算从图中的目标节点到起始节点的所有可能路径。
private Stack<string> TestCaseGeneration(int TargetStateIndex, double[,] adjacancy, Stack<string> TotalResults = null, Stack<string> CarrierStack = null, int StartStateIndex = 0)
{
Stack<string> Result = CarrierStack;
Result.Push(TargetStateIndex.ToString() + " - ");
if (TargetStateIndex == StartStateIndex)
{
TotalResults.Push(StackToSingleString(Result));
return TotalResults;
}
else
{
List<string> neighbours = ListNeighbourLeadingToTargetNode(TargetStateIndex, adjacancy, EventIndex);
int NumberOfNeighbours = neighbours.Count;
if (NumberOfNeighbours != 0)
{
for (int i = 0; i < NumberOfNeighbours; i++)
{
return TestCaseGeneration(int.Parse(neighbours[i].ToString()), adjacancy, TotalResults, Result, StartStateIndex);
}
}
}
else return null;
}
问题是return
在for
循环中,我该如何解决?
答案 0 :(得分:0)
如果您不想返回任何内容,请在最后return null;
之前设置}
如果将return null;
放在if else语句中,编译器就会知道并非所有代码路径都返回一个值!
修改强>
我现在看到你的问题很抱歉。
您需要创建一个最后返回的变量。 在if语句中,您可以编辑变量。
如果永远不会编辑变量,则返回变量的默认值!
答案 1 :(得分:0)
认为您的代码将始终返回一个值。我建议你在方法的最后一个之前抛出异常:它会编译,你很有可能看到你的代码在行动!如果它抛出异常,你知道什么时候不会返回一个值。
答案 2 :(得分:0)
正如已经指出的那样,你的其他声明什么也没做。考虑以外行人的方式阐述你的方法:
method(){
if(something){
// do stuff
return value
}
else{
// do something else but,
// never do anything with this information
}
return null
}
这基本上是你的方法在分解时的样子。 else语句可以完成任务,但这些东西从未在任何地方使用过。
假设在else语句中调用递归函数,递归调用1000次。在此循环结束时,它将返回null或某些值返回else语句。
那个else语句对返回值没有任何作用,然后返回null。
该递归调用基本上是无用的,除非它也被返回。
考虑尝试:
private Stack<string> TestCaseGeneration(int TargetStateIndex, double[,] adjacancy, Stack<string> TotalResults = null, Stack<string> CarrierStack = null, int StartStateIndex = 0)
{
Stack<string> Result = CarrierStack;
Result.Push(TargetStateIndex.ToString() + " - ");
if (TargetStateIndex == StartStateIndex)
{
TotalResults.Push(StackToSingleString(Result));
return TotalResults;
}
else
{
int NumberOfNeighbours = ListNeighbourLeadingToTargetNode(TargetStateIndex, adjacancy, EventIndex).Count;
if (NumberOfNeighbours != 0)
{
for (int i = 0; i < NumberOfNeighbours; i++)
{
return TestCaseGeneration(i, adjacancy, TotalResults, Result, StartStateIndex);
}
}
}
return null;
}
请注意,我在else语句中为递归调用添加了一个return语句。