我有一个关于我所做的递归函数的问题。有一种方法,一旦我到达“return arraydenodes”行,我可以完全退出函数了吗?因为我使用visual studio执行了代码执行,并且一旦执行到达上述行,就会从while循环中返回到堆栈(或者我相信)到“else”中。正因为如此,path.Add
线继续执行,给我一个不同的结果。这是代码。完全退出递归函数
private Node[] checkTheOtherDude(Node start, Node endpadre, Node end, Node previousNodeTemp)
{
//Debug.Log(previousNode);
while(endpadre != null && !stop)
{
if (!Physics.Linecast(end.transform.position, endpadre.transform.position)) // end y endpadre se ven?
{
previousNode = endpadre;
Node newParent = endpadre.padre;
checkTheOtherDude(start, newParent, end, previousNode); // chequear n y n padre padre
}
else
{
//previousNode = endpadre;
path.Add(end);
path.Add(previousNode);
end = endpadre;
Node newParent = end.padre;
checkTheOtherDude(start, newParent, endpadre, previousNode);
}
}
stop = true;
path.Add(end);
path.Add(start);
path.Reverse();
arraydeNodes = path.ToArray();
return arraydeNodes;
}
看来,我已经解决了这个问题,这个问题(或至少我认为)这是while条件,将其改为while (endpadre != null && !stop && endpadre != start)
我错过了endpadre != start
,使循环将结束右时结束节点与开始节点相同。
如果你设计正确,它应该没有关系。如果遇到麻烦,递归方法做得太多(关注点分离)或者结构不正确。当最内部的调用退出时,它应该自然地返回到堆栈上方,即在该方法的正确返回结构内。 –
当您在方法结束时递归退出时,您将不会退出,直到每次递归调用都达到它的退出点。这意味着遍历所有的东西。考虑将退出条件放在递归方法的开始 –
因为我不确切知道函数应该做什么,所以在这种情况下可能会出错,但通常您要“返回”递归调用的结果。 – code11