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)
这段代码有什么问题?
谢谢
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)
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |