8

I read this simple and elegant python solution for finding all permutations of a given string. It is recursive. Based on that I tried to implement an iterative solution in python.

Below is my code. But it works only for 3 character strings :( Stuck trying to see how the recursion base case condition and recursion condition translates into iterative(non-recursive) Any pointers would help to get a iterative solution working.(Either based on this algorithm or any other)

def permutations_iter(word):
while True:
 perms = []
 result = []
 char = word[0]
 new_word = word[1:]
 if len(new_word)==2: 
 perms = [new_word,''.join(reversed(new_word))]
 for perm in perms: 
 #insert the character into every possible location 
 for i in range(len(perm)+1): 
 result.append(perm[:i] + char + perm[i:]) 
 return result
 if len(new_word)==2:
 break;
 #example code to call this iterative function 
 print permutations_iter("LSE") 
asked Aug 14, 2013 at 9:28

1 Answer 1

23

You can convert every recursion to an iteration using a stack. But in this case it's even simpler since the algorithm is very simple.

def perms(word):
 stack = list(word)
 results = [stack.pop()]
 while len(stack) != 0:
 c = stack.pop()
 new_results = []
 for w in results:
 for i in range(len(w)+1):
 new_results.append(w[:i] + c + w[i:])
 results = new_results
 return results

For a more general conversion of recursion to iteration with a stack read this

answered Aug 14, 2013 at 11:39
2
  • Thanks for the link which explained And for the solution. Commented Aug 14, 2013 at 12:46
  • perfect and neat! Commented Sep 19, 2016 at 19:14

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.