Проблема в том, что вы передаете строковое представление списка в рекурсивных вызовах функции вместо того, чтобы присоединяться к каждому элементу списка. Например, когда strList = ['a', 'a', 'b']
, str(strList)
вернет "['a', 'a', 'b']"
. Вместо этого вы должны использовать ''.join(strList)
для фактического получения "aab"
.
Эта проблема не требует использования рекурсии, фактически вы можете достичь результата в одной строке с помощью itertools.permutations.
>>> set(''.join(x) for x in itertools.permutations('aab'))
{'aab', 'aba', 'baa'}
Но если вы хотите реализовать рекурсивную версию, вам также необходимо передать аргумент для текущего индекса строки, которую вы достигли. Есть много примеров в Интернете для решения этой конкретной проблемы, просто требуется быстрый поиск в Google, и, возможно, даже на SO.