public static bool CalculateNextNode (int NumSingleSheets, ref NTree<List<int>> Tree, double probability) { var savedNode = memory.Find(Tree.GetNode()); var found = savedNode != null; if (!found) { if (!Tree.IsLeaf) { var nodeProbability = (1.0 / double.Parse(Tree.GetNode().Count.ToString())); probability = probability * nodeProbability; for (var i = Tree.GetNode().Count - 1; i >= 0; i--) { var newTree = new NTree<List<int>>(Tree.GenerateNewNode(i)); CalculateNextNode(NumSingleSheets, ref newTree, probability); var k = 0; if (Tree.IsSolitary) { k = 1; } for (var j = 0; j <= 2; j++) { foreach (var element in newTree.probabilityNodeToleafPerSinglesSheets[j]) { Tree.probabilityNodeToleafPerSinglesSheets[j + k].Add(nodeProbability * element); } } } memory.Add(new MemoriaParaP151(Tree.GetNode(), Tree.probabilityNodeToleafPerSinglesSheets)); } else { Tree.probabilityNodeToleafPerSinglesSheets[0].Add(1.0); memory.Add(new MemoriaParaP151(Tree.GetNode(), Tree.probabilityNodeToleafPerSinglesSheets)); } } else { Tree.probabilityNodeToleafPerSinglesSheets = savedNode.probabilityNodeToleafPerSinglesSheets; } return found; }