如何更正此递归代码
本文关键字:代码 递归 何更正 | 更新日期: 2023-09-27 18:27:33
我有下面的递归函数,它应该沿着树向下移动,只显示根节点。这有两个问题。1.并非所有代码路径都返回一个值。2.DisplayLeafNode函数在for循环中不会被调用多次,因为它是在第一次调用后返回的。
@functions
{
public static HelperResult DisplayLeafNode(Node node)
{
if (node.nodes != null)
{
for (int i = 0; i < node.nodes.Count; i++)
{
return @DisplayLeafNode(node.nodes[i]);
}
}
else
{
return DisplayNode(node);
}
}
}
@helper DisplayNode(Node node)`enter code here`
{
<a>
@node.NodeName
</a>
}
有人能帮我纠正一下吗?
递归函数调用自己,因此您的代码应该是:
@helper DisplayNode(Node node)
{
<a>
@node.NodeName
</a>
@if(node.Nodes != null)
@foreach(Node innernode in node.Nodes)
{
@DisplayNode(innernode)
}
}
只需调用模板中的@DisplayNode(root)
(这意味着DisplayLeafNode
函数不是必需的)。
具体来说,您想要实现什么?你想退货什么?假设您想要返回Node。我相信一个Node会有两个道具(一个值和对其Node.的其他引用,或者可能是一个节点列表)。
要回答要实现的目标,了解如何为Node安排数据结构会更有用。根据你的ds,你可以使用一种更干净的算法方法来检查节点ref,并根据其计数,进一步向下或向上到达你的最后一个节点或父节点。
如果你必须返回一个HelperResult,但没有找到合适的方法,那么你可以更好地创建一个新的HelperResult。如果你对内存消耗很挑剔,这肯定是一个缺陷,但更愿意在你想何时返回以及你想返回什么方面采取更清洁的方法。