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