recursion depth problem

Steven Bethard steven.bethard at gmail.com
Sun Apr 22 21:34:04 EDT 2007


proctor wrote:
> On Apr 22, 2:06 pm, Steven Bethard <steven.beth... at gmail.com> wrote:
>> proctor wrote:
>>> On Apr 22, 1:24 pm, Michael Bentley <mich... at jedimindworks.com> wrote:
>>>> On Apr 22, 2007, at 1:49 PM, proctor wrote:
>>>>> i have a small function which mimics binary counting.  it runs fine as
>>>>> long as the input is not too long, but if i give it input longer than
>>>>> 8 characters it gives
>>>>> RuntimeError: maximum recursion depth exceeded in cmp
>>>>> i'm not too sure what i am doing improperly.  is there really a lot of
>>>>> recursion in this code?
>>>>> ==================
>>>>> import sys
>>>>> def ch4(item, n=0):
>>>>>    if n < len(item):
>>>>>            if item[n] == '0':
>>>>>                    item[n] = '1'
>>>>>                    print ''.join(item)
>>>>>                    ch4(item)
>>>>>            elif item[n] == '1':
>>>>>                    item[n] = '0'
>>>>>                    ch4(item, n+1)
>>>>> ch4(list(sys.argv[1]))
>>>>> ==================
>>>> Yes.  There really is *that* much recursion in that code.  502 levels
>>>> with input length of 8 characters, 1013 with 9 characters, 2035 with
>>>> 10 characters...  There's a pattern there ;-)
>>> ok, thanks michael!
>>> is there a way to avoid it here?  how could i write this better, (if
>>> at all)?
>> Google for permutation-like recipies:
>>
>>      http://www.google.com/search?q=Python+permutations
>>
>> Use the code from the first hit::
>>
>>      >>> for x in xselections('01', 8):
>>      ...     print ''.join(x)
>>      ...
>>      00000000
>>      00000001
>>      00000010
>>      ...
>>      11111101
>>      11111110
>>      11111111
>>
>> Explaining to your teacher why your code uses generators when you
>> haven't been taught them yet is left as an exercise to the reader. ;-)
>>
>> STeVe
> 
> this is really nice, thanks steve.  much slicker than my code.
> 
> for interest sake:  is my method unredeemable?

Let's just say that I don't currently see an obvious way of redeeming 
it. ;-)

STeVe



More information about the Python-list mailing list