c# - 递归实验

标签 c# java .net algorithm recursion

我正在尝试尝试递归以掌握这个概念。它与语言无关,因此相同的概念适用于 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/

相关文章:

c# - 错误 "CommentsController does not have a default constructor"

c# - 等待 IEnumerable 项目,(等待后等待)

c# - Entity Framework : Check all relationships of an entity for foreign key use

c# - ASP.NET Core RC2 区域未发布

c# - 如何在繁忙的循环中显示进度?

java - Java EE 中应用服务器和数据库服务器之间的通信

java - 当网格列值为空时如何显示默认值?

java - 如何使用生成的 id 检查记录的唯一性?

c# - Serializable 和 MarshalByRefObject 之间的区别

.net - 如何更改 .net SOAP 请求的日期格式?