private void Build(ICollection<string> possibleWords, AnagramMatchTracker currentAnagramMatchTracker)
        {
            var matchingWords = GetWordsWhichMatchesAnagram(possibleWords, currentAnagramMatchTracker.AnagramRest);
            foreach (var word in matchingWords)
            {
                var canAdd = currentAnagramMatchTracker.Add(word);

                if (canAdd)
                {
                    if (AnagramMatchFound(currentAnagramMatchTracker))
                    {
                        anagramCombinations.Add(currentAnagramMatchTracker.SaveAnagramMatch());
                        currentAnagramMatchTracker.Remove();
                        continue;
                    }

                    if (CanAddMoreWords(currentAnagramMatchTracker))
                        Build(matchingWords, currentAnagramMatchTracker);

                    currentAnagramMatchTracker.Remove();
                }
            }
        }
 private bool CanAddMoreWords(AnagramMatchTracker currentAnagramMatchTracker)
 {
     return !currentAnagramMatchTracker.IsAnagramRestEmpty && currentAnagramMatchTracker.Count < maxAnagramWords;
 }
 private bool AnagramMatchFound(AnagramMatchTracker currentAnagramMatchTracker)
 {
     return currentAnagramMatchTracker.IsAnagramRestEmpty && currentAnagramMatchTracker.Count == maxAnagramWords;
 }