[Python-Dev] Proper tail recursion
Michael Chermside
mcherm at mcherm.com
Thu Jul 15 23:38:20 CEST 2004
I wrote:
> The recursion limit (the value of it anyhow) is an implementation detail.
Martin replies:
> No, it is not. In standard Python, the program
>
> def rec(n):
> rec(n-1)
>
> n=1
> while 1:
> try:
> rec(n)
> except RuntimeError:
> break
> print "The recursion limit is", n
>
> will terminate. In the modified Python, it will not terminate.
> It is a change in behaviour, and thus a language feature.
First, I'm going to make a slight modification to your program, since I
want a version that actually does display the recursion limit. I tried
the following program instead:
>>> def rec(n):
... print n
... rec(n+1)
...
>>> rec(1)
Running this in Jython 2.1 (a well-known implementation of the Python
language) produced the numbers from 1 to 888, then immediately exited.
Running it on CPython 2.3 produced the numbers from 1 to 999, then a
traceback that looked like this:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
[... etc for a total of about 1000 lines ...]
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
File "<stdin>", line 3, in rec
RuntimeError: maximum recursion depth exceeded
It then returned me to the interactive prompt.
I presume that since the behavior was different, CPython must not
actually be a correct implementation of the Python language, right?
Not-all-differences-are-language-differences lly yours,
Michael Chermside
More information about the Python-Dev
mailing list