private IEnumerable <string> GenerateGenes() { List <string> GenerateGenesRecursive(List <string> genes, string gene, int depth) { if (depth == GeneLength) { genes.Add(gene); return(genes); } depth++; return(Dialect.Aggregate(genes, (current, token) => GenerateGenesRecursive(current, $"{gene}{token}", depth))); } return(GenerateGenesRecursive(new List <string>(), "", 0)); }