#Haskell, 84 bytes <!-- language-all: lang-haskell --> import Data.List h s=[k|l<-s,k<-nub["()"++l,"("++l++")",l++"()"]] (!!)$iterate h[""] First of all: `iterate` does create a recursion sequecnce of `h`, but this is a builtin, and by the rules we may use builtins that use recursion. This is just a very simple recursive approach, we can generate the n-Dyck-words by putting (n-1)-Dyck-words after, in between or before a pair of opening and closing parenthesis. This approach however does generate duplicates, that is why we filter for unique elements using `nub`. With the elimination of duplicates at each recursion step (duplicates among a list of length 3) this approach is quite efficient. As Haskell is a functional language, it is almost impossible to do this without recursion. There is an even more direct approach, but that one is banned under the current rules.