Проблема в логике рекурсии c, вам нужно как-то изменить ее, чтобы правильно представить логику рекурсии c, ниже приведен пример:
...
#produce results for n-1 length so we can use it later
res=generator(n-1)
for word1 in words:
# for each partial result (length n-1) we can generate final result by concatenating current word to it
for r1 in res:
complete.append(word1+r1)
Весь код:
def generator (n):
complete = [ ]
words = ["A", "B", "C",]
if (n==1):
for word1 in words:
complete.append(word1)
return complete
elif (n==0):
return complete
else:
res=generator(n-1)
for word1 in words:
for r1 in res:
complete.append(word1+r1)
return complete
и результат для n = 3: (27 строк)
['AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB', 'ACC', 'BAA', 'BAB', 'BAC', 'BBA', 'BBB', 'BBC', 'BCA', 'BCB', 'BCC', 'CAA', 'CAB', 'CAC', 'CBA', 'CBB', 'CBC', 'CCA', 'CCB', 'CCC']