# Revision history [back]

Note the original function words is recursive: it calls itself.

Your new function non_rep_words should also call itself, rather than calling the old words:

def non_rep_words(alphabet,l):
if l == 0:
yield []
elif l == 1:
for a in alphabet:
yield [a]
else:
for word in non_rep_words(alphabet, l-1):
for a in alphabet:
if word[-1] != a:
yield word+[a]


Here I also corrected the case l == 1. You can avoid this case by adding an extra clause to your if statement:

def non_rep_words(alphabet,l):
if l == 0:
yield []
else:
for word in non_rep_words(alphabet, l-1):
for a in alphabet:
if len(word) == 0 or word[-1] != a:
yield word+[a]


Note the original function words is recursive: it calls itself.

Your new function non_rep_words should also call itself, rather than calling the old words:

def non_rep_words(alphabet,l):
if l == 0:
yield []
elif l == 1:
for a in alphabet:
yield [a]
else:
for word in non_rep_words(alphabet, l-1):
for a in alphabet:
if word[-1] != a:
yield word+[a]


Here I also corrected the case l == 1. You can could also avoid this case by adding an extra clause to your if statement:

def non_rep_words(alphabet,l):
if l == 0:
yield []
else:
for word in non_rep_words(alphabet, l-1):
for a in alphabet:
if len(word) == 0 or word[-1] != a:
yield word+[a]


Note the original function words is recursive: it calls itself.

Your new function non_rep_words should also call itself, rather than calling the old words:

def non_rep_words(alphabet,l):
if l == 0:
yield []
elif l == 1:
for a in alphabet:
yield [a]
else:
for word in non_rep_words(alphabet, l-1):
for a in alphabet:
if word[-1] != a:
yield word+[a]


Here I also corrected the case l == 1. You .

Note that you could also avoid this case by adding an extra clause to your if statement:

def non_rep_words(alphabet,l):
if l == 0:
yield []
else:
for word in non_rep_words(alphabet, l-1):
for a in alphabet:
if len(word) == 0 or word[-1] != a:
yield word+[a]


However this will perform many pointless comparisons to 0, so it is probably slower.