Python: использование рекурсивного алгоритма в качестве генератора

Недавно я написал функцию для генерации определенных последовательностей с нетривиальными ограничениями. Проблема пришла с естественным рекурсивным решением. Теперь случается так, что даже при относительно небольших входных данных последовательности составляют несколько тысяч, поэтому я предпочел бы использовать мой алгоритм в качестве генератора, а не использовать его для заполнения списка всеми последовательностями.

Вот пример. Предположим, мы хотим вычислить все перестановки строки с помощью рекурсивной функции. Следующий наивный алгоритм принимает дополнительный аргумент «storage» и добавляет к нему перестановку всякий раз, когда он его находит:

def getPermutations(string, storage, prefix=""):
   if len(string) == 1:
      storage.append(prefix + string)   # <-----
   else:
      for i in range(len(string)):
         getPermutations(string[:i]+string[i+1:], storage, prefix+string[i])

storage = []
getPermutations("abcd", storage)
for permutation in storage: print permutation

(Пожалуйста, не заботьтесь о неэффективности, это только пример.)

Теперь я хочу превратить свою функцию в генератор, то есть получить перестановку вместо добавления ее в список хранения:

def getPermutations(string, prefix=""):
   if len(string) == 1:
      yield prefix + string             # <-----
   else:
      for i in range(len(string)):
         getPermutations(string[:i]+string[i+1:], prefix+string[i])

for permutation in getPermutations("abcd"):
   print permutation

Этот код делаетне&nbsp;работа (функция ведет себя как пустой генератор).

Я что-то пропустил? Есть ли способ превратить вышеуказанный рекурсивный алгоритм в генераторне заменяя его итеративным?