我有下面的递归函数,它应该沿着树向下传播,只显示根节点。这有两个问题。 1.并非所有代码路径都返回一个值。 2.在for循环中不会多次调用DisplayLeafNode函数,因为它在第一次调用后返回。
@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>
}
有人可以帮忙纠正这个吗?
答案 0 :(得分:1)
递归函数调用自身,因此您的代码应为:
@helper DisplayNode(Node node)
{
<a>
@node.NodeName
</a>
@if(node.Nodes != null)
@foreach(Node innernode in node.Nodes)
{
@DisplayNode(innernode)
}
}
只需在模板中调用@DisplayNode(root)
(意味着不需要DisplayLeafNode
功能)。
答案 1 :(得分:0)
具体到底你想要实现什么目标?你想要什么回报?假设你想要返回Node。我相信一个Node会有2个道具(一个值和另一个对它的Node的引用。或者可能是一个节点列表)。
要回答要实现的目标,了解如何为Node安排数据结构会更有用。 根据您的ds,您可以设置一种更清晰的算法方法,以检查节点引用并根据其计数,进一步向下或进一步向上到达您的最后一个节点或父节点。
如果你必须返回一个HelperResult但找不到合适的方法,那么你可以更好地创建一个新的HelperResult。如果你对内存消耗挑剔,那肯定是个缺陷, 但是,当您想要返回以及想要返回的内容时,我宁愿设备更清晰的方法。