I remember when I was in college, a very tricky quiz was to convert recursive code to a non-recursive one. I have always found it very challenging.
Permutation can easily be solved with recursion. So I tried to solve it without recursion. It was a fun exercise.
alpha = 'xyz'
def main(): n = list(alpha) while n: print n n = next(n) def next(str): str.pop() # loop to find a upgradable tail while str: tail = str[-1] # search for an upgrade to the tail new_tail = [i for i in alpha if i > tail and i not in str] if not new_tail: str.pop() continue str[-1] = new_tail[0] # fill the rest return str + [i for i in alpha if i not in str]