I need a kick in the head on this one. I have the following recursive function defined:
def perms(s):
if(len(s)==1):
return s
res = \'\'
for x in
This kind of thing is a nice place for generators (https://docs.python.org/3.3/tutorial/classes.html#generators), and yield
.
Try something like this (not tested):
def permute_string(s):
if len(s) <= 1: # "" and 1 char strings are their all their own permutaions.
yield s
return
head = s[0] # we hold on to the first character
for tail in permute_string(s[1:]) : # permute the rest
yield head + tail
# main
for permutation in permute_string(s) :
print(permutation)
This is the classic permutation algorithm: you keep the first character and prepend it to all permutations of the remaining characters. This particular function is a python generator: that means it can keep running while yielding its results one-by-one. In this case, it makes it easier to concentrate on the algorithm without worrying about the details of how to get the data back to the caller.