A recursive approach (which is what I would use) would involve breaking the problem into isomorphic subproblems: to find all permutations of a string, find all permutations of the string without a ...
C# 8 adds ranges and recursive patterns. Ranges easily define a sequence of data, replacing the Enumberable.Range(). Recursive patterns bring an F#-like construct to C#. Recursive patterns are an ...