Make a generator from a recursive function

James Stroud jstroud at mbi.ucla.edu
Fri Dec 9 22:49:47 EST 2005


Alex Martelli wrote:
> 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

Yes, that's what I was thinking. Thank you.



More information about the Python-list mailing list