getrecursiondepth
Andrew Dalke
adalke at mindspring.com
Fri Oct 1 11:03:51 EDT 2004
Manlio Perillo wrote:
>>>>def foo2(n = 0):
>
> if pystate.firstlevel_call():
> foo2.recursiondepth = 0
> else:
> foo2.recursiondepth += 1
>
> #print 'n = %s, recursion depth = %s' % (n,
> foo2.recursiondepth)
> if n == 5: return
> foo2(n + 1)
In addition, if you aren't supporting threads
then the following will also work.
def foo3(n=0):
foo3.recursiondepth += 1
try:
if n == 5: return
foo3(n+1)
finally:
foo3.recursiondepth -= 1
foo3.recursiondepth = 0
% timeit.py -s "import spam" "spam.foo2()"
10000 loops, best of 3: 70.8 usec per loop
% timit.py -s "import spam" "spam.foo3()"
10000 loops, best of 3: 47.6 usec per loop
Still, the fastest solution, which is also
concise, thread-safe and portable (meaning
that can be easily translated to other
languages) is
def _foo4(n, depthlimit):
if depthlimit == 0: return
_foo4(n+1, depthlimit-1)
def foo4(n=0):
_foo4(n, 5)
% timeit.py -s "import spam" "spam.foo4()"
100000 loops, best of 3: 16.4 usec per loop
Andrew
dalke at dalkescientific.com
More information about the Python-list
mailing list