Make a generator from a recursive function

Alex Martelli aleax at mail.comcast.net
Fri Dec 9 22:21:25 EST 2005


James Stroud <jstroud at mbi.ucla.edu> wrote:
   ...
> This was my answer to the thread "new in programing":
> 
> def do_something(*args):
>    print args
> 
> def do_deeply(first, depth, lim, doit=True, *args):
>    if depth < lim:
>      do_deeply(first+1, depth+1, lim, False, *args)
>    if first <= depth:
>      do_deeply(first+1, depth, lim, True, *args + (first,))
>    elif doit:
>      do_something(*args)
> 
> do_deeply(first=1, depth=3, lim=4)
> 
> I thought it was a good answer, but I think better would be a generator. Is
> there a straightforward way to make such a function a generator, or does it

I'm not entirely sure what you mean, but I will guess it's something not
too different from...:

def do_deeply(first, depth, lim, doit=True, *args):
   if depth < lim:
     for x in do_deeply(first+1, depth+1, lim, False, *args):
       yield x
   if first <= depth:
     for x in do_deeply(first+1, depth, lim, True, *args + (first,)):
       yield x
   elif doit:
     yield args

to be used with

for x in do_deeply(first=1, depth=3, lim=4):
    do_something(*x)


Did I guess right...?


Alex



More information about the Python-list mailing list