[Tutor] recursion

noopy ml1 at bitbert.com
Thu Feb 4 21:03:14 EST 2016

```Hi,

I just cannot get my head around the following code, maybe someone could
explain it to me.

def permutations(items):
n = len(items)
if n==0: yield []
else:
for i in range(len(items)):
for cc in permutations(items[:i]+items[i+1:]):
yield [items[i]]+cc

for p in permutations(list("XYZ")):
print(''.join(p))

I did not figure out how this works in the deepest level of the
recursion. I mean, when I go down the recursion level
and do the part "for cc in permutations("Z")".

I have a problem with the following understanding:
when I am in the recursion and call "for cc in permutations("Z")", the
next level of the recursion will do "for cc in permutations([])", which
will yield an empty list.

But when "for cc in permutations([])" yields an empty list, why does
"for cc in permutations("Z")" then actually have an item so that "yield
[items[i]]+cc" will be executed?
So although "for cc in permutations("Z")" does have an item it does
"yield [items[i]]+cc" - thats the confusion for me. I hope I could
express myself clearly.

Maybe someone could enlighten me, I would be more than happy since I