Dmitri O.Kondratiev wrote: > > The function I wrote (below) reverses lists all right: > > def reverse(xs): > if xs == []: > return [] > else: > return (reverse (xs[1:])) + [xs[0]] > > > >>> reverse ([1,2,3]) > [3, 2, 1] > >>> > > > Yet when I try to reverse a string I get: > > >>> reverse ("abc") > > ... > ... > ... > > File "C:\wks\python-wks\reverse.py", line 5, in reverse > > return (reverse (xs[1:])) + [xs[0]] > > File "C:\wks\python-wks\reverse.py", line 5, in reverse > > return (reverse (xs[1:])) + [xs[0]] > > File "C:\wks\python-wks\reverse.py", line 2, in reverse > > if xs == []: > > RuntimeError: maximum recursion depth exceeded in cmp > > >>> > > What's wrong? Why recursion never stops? > If you are doing this as an python-learning exercise, then read on. If you are doing this reversal for real code, then try:
xs.reverse() for in-place reversal of a list (but not a string), or result = xs[::-1] for creating a reversed copy of either a string or a list Your recursion stops when xs == [], but when you're stripping characters off a string, like 'abc', the remaining portion will be 'bc', then 'c', than '', but never [] so you 'll never stop. Try: if xs == []: return [] elif xs == '': return '' else: ... Gary Herron > > Thanks, > Dima -- http://mail.python.org/mailman/listinfo/python-list