我試圖計算C#中遞歸函數內成功案例的數量,但我驚訝於我的變量在所有函數調用之間共享!在遞歸函數中共享變量
[更新2]
比怪此時更多。這樣做
i = i + validTreesFun(tree.Nodes, newWords.ToList()) ;
重置我到0
這樣
i = validTreesFun(tree.Nodes, newWords.ToList()) + i ;
給出了一些成績(我不知道這是否是正確的)
[更新:全碼]
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;
}
調試變量時,我取值1,但它在下一次迭代中重置爲0! 儘管使用了
i = i + ....
什麼是這段代碼的問題?
謝謝
我想你應該創建一個簡單的攝製嘲笑的recurisve電話並刪除所有列表,樹和LINQ的東西。你能製作一個完整的Repro,可以切割出來嗎? – AnthonyWJones 2009-09-03 11:27:09
我做過了,看到原始(編輯)問題,但這裏的人問完整的代碼,因爲我可能在代碼上犯了一些錯誤! – 0xFF 2009-09-03 11:29:51