变量函数中是否共享变量

0xF*_*xFF 0 c# recursion scope

我正在尝试计算C#中递归函数中成功案例的数量,但我对所有函数调用之间共享变量的事实感到惊讶!

[更新2]

这次比奇怪多了.这样做

i = i + validTreesFun(tree.Nodes, newWords.ToList()) ;
Run Code Online (Sandbox Code Playgroud)

将i重置为0

这样做

i = validTreesFun(tree.Nodes, newWords.ToList()) + i ;
Run Code Online (Sandbox Code Playgroud)

给出一些结果(我不确定它是否正确)

[更新:完整代码]

public static  int validTreesFun(List<Tree<char>> nodes, List<string> words)
    {
        int i = 0;
        if (nodes == null && (words == null || words.Count == 0 || (words.Count == 1 && words.First() == "")))
            return 1;
        else
            if (nodes == null)
                return 0;

        foreach (Tree<char> tree in nodes)
        {
            var validWords = words.Where(w => w.ToCharArray()[0] == tree.Root)
                .Select(w => w);
            if (validWords.Count() == 0)
                return 0;
            else
            {
                var newWords = validWords.Select(w => join( w.ToCharArray().Skip(1).ToArray()));
                i += validTreesFun(tree.Nodes, newWords.ToList());
            }
        }
        return i;
    }
Run Code Online (Sandbox Code Playgroud)

当对变量进行调试时,我取值1,但在下一次迭代时重置为0!尽管使用

i = i + ....
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

谢谢

Mar*_*rén 5

if (validWords.Count() == 0)
    return 0;
Run Code Online (Sandbox Code Playgroud)

应该

if (validWords.Count() == 0)
    continue;
Run Code Online (Sandbox Code Playgroud)

此外,一般来说,我个人认为只需要一次向一个递归函数发送一个元素就更好了.

public static  int validTreesFun(Tree<char> node, List<string> words)
Run Code Online (Sandbox Code Playgroud)

这样你就不会像上面那样得到同样的错误.最后,一个小调.

w => w.ToCharArray()[0] == tree.Root
Run Code Online (Sandbox Code Playgroud)

可写成

w => w[0] = tree.Root
Run Code Online (Sandbox Code Playgroud)