[Python-Dev] Re: Proper tail recursion

David Eppstein eppstein at ics.uci.edu
Mon Jul 19 20:30:30 CEST 2004


In article <005701c46db5$764b48d0$6602a8c0 at arkdesktop>,
 "Andrew Koenig" <ark-mlist at att.net> wrote:

> > I also haven't seen the use case that requires this and couldn't
> > easily be fixed by changing the data structure or code slightly.
> > (Andrew Koenig's theoretical objections don't count as use cases.)
> 
> Didn't we just hear that this problem affects pickling?

We heard that the recursion limit prevents recursive DFS from being 
applied to large graphs, and that pickling uses DFS.  However, tail 
recursion wouldn't help in this case -- it's a deep recursion but not a 
tail recursion.

I did end up implementing a non-recursive DFS, btw.  It has two 
advantages over recursive DFS: (1) the amount of stuff stored per stack 
item is much smaller: a pair (vertex, iterator of neighbors), rather 
than all the overhead of a call stack frame, and (2) the flat control 
structure allows it to be used as a simple generator (e.g. for listing 
vertices in preorder or postorder).  The disadvantage is that the code 
is (I think) less readable than a recursive DFS would be.  You can view 
my attempt at http://www.ics.uci.edu/~eppstein/PADS/DFS.py (one hint 
that Python's control structures are missing something is the explicit 
use of try...iterator.next()...except StopIteration) but please send any 
feedback about my code to me off-list since it's not really a python-dev 
issue any more.

-- 
David Eppstein                      http://www.ics.uci.edu/~eppstein/
Univ. of California, Irvine, School of Information & Computer Science



More information about the Python-Dev mailing list