我正在尝试尝试递归以掌握这个概念。它与语言无关,因此相同的概念适用于 C# 和 Java。
我有一个具有多个节点的TreeView
。我想遍历每个节点并计算满足特定条件的节点。如果任何时候不满足条件,我希望算法最终返回 -1
。
每个 TreeViewItem
仅当它有一个名为“Condition”的 Tag
时才会被考虑(TreeViewItems 共有 3 种类型 - 我只会考虑“Condition” )。
一旦发现 TreeViewItem 属于“条件”类型,我想检查它是否满足某个条件。正如我之前提到的,即使只有一个 TreeViewItem 不满足条件,我也希望算法最终返回 -1。
如果算法不返回-1,我希望它返回它找到的有效条件的数量 - 即每次成功通过条件时都会增加一个整数,并在结束。
这是我迄今为止尝试过的:
private int CountConditions(TreeViewItem item)
{
int conditionCount = 0;
foreach (TreeViewItem child in item.Items)
{
int previousCount = CountConditions(child);
if (previousCount == -1)
{
return -1;
}
else
{
return conditionCount += previousCount;
}
}
if (item.Tag.Equals("Condition"))
{
if (/*Condition is not satisfied*/)
{
return -1;
}
else
{
return conditionCount++;
}
}
else
{
return conditionCount;
}
}
如果不满足条件,我当前的算法实际上会返回 -1,但是如果满足条件,它只会返回 0,而不是有效条件的数量。
最佳答案
你使用
return conditionCount++;
这是不好的做法。有充分的理由。这里发生的是 a)返回条件计数(您将其设置为零) b) 增加条件计数
b 永远不会发生,因为它位于 return 语句之后,因此您总是将 0 传递到下一个递归步骤。
你可以使用
return ++conditionCount;
或者更好
conditionCount++;
return conditionCount;
关于c# - 递归实验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929745/