Iterative vs. Recursive coding

Dave Angel davea at dejaviewphoto.com
Sat Aug 21 07:07:16 EDT 2010


Baba wrote:
> On Aug 21, 7:37 am, John Nagle <na... at animats.com> wrote:
>   
>> On 8/20/2010 1:17 PM, John Bokma wrote:
>>     
>>> I think you mean tail recursion optimization / elimination.
>>> Python does tail recursion:
>>>       
>>     Not very well.
>>
>>      def cnt(n) :
>>          if n > 0 :
>>              cnt(n-1)
>>     
>
> Hi John
>
> I'm intrigued by this example. Is there something missing in the code?
> When i run it i get: <function cnt at 0x02B2FE70>
> I suppose it is meant to print a sequence of numbers from n down to
> zero?
>
> re tail recursion, on wiki i found:
> "With tail recursion, there is no need to remember the place we are
> calling from—instead, we can leave the stack alone, and the newly
> called function will return its result directly to the original
> caller. Converting a call to a branch or jump in such a case is called
> a tail call optimization. "
>
> not sure i understand that...
> is this bit of theory applicable to your cnt function above?
>
> tnx
> Baba
>
>   
Juding from your output, you didn't call the function, you just named 
it. To call it you needed to use parentheses, type something like

cnt(5)

The function is a do-nothing function. It makes no calculations, returns 
no result. Just illustrating recursion in the simplest way.

Tail call optimization would work fine on that function. CPython doesn't 
do such optimization, however. If it did, it would convert the call at 
the end to a decrement and a jump. The net effect would be something like:

def cnt(n) :
while True:
if n > 0:
n = n-1
continue
break

Clearly that could be optimized as well. Maybe a great optimizer could 
turn it into:

def cnt(n):
pass

DaveA




More information about the Python-list mailing list