[Tutor] A recursion question

Kĩnũthia Mũchane kinuthia.muchane at gmail.com
Sat Nov 19 20:11:42 CET 2011


On 11/19/2011 04:59 PM, Dave Angel wrote:
> On 11/19/2011 01:36 AM, Kĩnũthia Mũchane wrote:
>> On 11/19/2011 06:03 AM, Asokan Pichai wrote:
>>> Another way to do that is to avoid any intermediate variables 
>>> altogether
>>> That may be easier to understand YMMV
>>>
>>> def counter(mylist, val):
>>>      if len(mylist == 0):
>>>             return 0
>>>      if mylist[0] == val:
>>>            return  1 + counter(mylist[1:], val)
>>>      else:
>>>            return counter(mylist[1:])
>> The intermediate variable explanation by Dave actually clinched it 
>> for me. Actually, the one I wrote is suspiciously similar to yours 
>> ;-). Anyway, thanks Asokan!
>
> FWIW, Asokan's code looks exactly right to me. But I figured the 
> version I supplied would make it clearer to you what was happening.
It made it crystal clear, thank you very much.
>
> The key to thinking recursively is to figure out exactly what the 
> function as a whole does, then figure out how to use exactly such a 
> function that  solves a somewhat smaller problem, to solve the whole 
> thing.  Since the function as a whole takes in a list, and returns a 
> count, that's the way to use the "smaller problem" function.  Both 
> Asokan's answer and mine do that.  But his "local variable" is implied 
> in the expressions, where I made it explicit so you could see what was 
> happening.
And I saw what was happening ;-)
>
> If you're familiar with the mathematical proof by induction, this is 
> very analogous.






-- 
Kĩnũthia

S 1º 8' 24”
E 36º 57' 36”
1522m



More information about the Tutor mailing list