Tak třeba C#:
public IEnumerable<string> GetIds(char[] chars, int length)
{
foreach(var ch in chars)
{
if (length == 1)
{
yield return ch.ToString();
continue;
}
var subs = GetIds(chars, length - 1);
foreach(var sub in subs)
{
yield return ch + sub;
}
}
}