Я пытаюсь рассчитать количество случаев успеха в рекурсивной функции в 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 материала. Можете ли вы создать полный репро, который можно отрезать? – AnthonyWJones
Я сделал, посмотрел исходный (редактировать) вопрос, но люди здесь попросили полный код, так как я, возможно, допустил некоторые ошибки в коде! – 0xFF