Recursive functions not returning lists as expected

2010-05-03 Thread rickhg12hs
Would a kind soul explain something basic to a python noob?

Why doesn't this function always return a list?

def recur_trace(x,y):
  print x,y
  if not x:
return y
  recur_trace(x[1:], y + [x[0]])

Here are a couple sample runs.

>>> print(recur_trace([],[1,2,3]))
[] [1,2,3]
[1,2,3]

So that worked okay and returned the list [1,2,3].

>>> print(recur_trace([9,8],[1,2,3]))
[9,8] [1,2,3]
[8] [1,2,3,9]
[] [1,2,3,9,8]
None

No list is returned here.  Why?
[Using Python 2.6.2]
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Recursive functions not returning lists as expected

2010-05-03 Thread rickhg12hs
On May 4, 1:34 am, Cameron Simpson  wrote:
> On 03May2010 22:02, rickhg12hs  wrote:
> | Would a kind soul explain something basic to a python noob?
> |
> | Why doesn't this function always return a list?
> |
> | def recur_trace(x,y):
> |   print x,y
> |   if not x:
> |     return y
> |   recur_trace(x[1:], y + [x[0]])
>
> You need:
>     return recur_trace(x[1:], y + [x[0]])
>
> Otherwise the function returns None.

Ah, an explicit "return" is required.  Thanks!
[To bad there's no tail recursion optimization.]  8-(

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Recursive functions not returning lists as expected

2010-05-04 Thread rickhg12hs
On May 4, 1:32 pm, Terry Reedy  wrote:
> On 5/4/2010 1:45 AM, rickhg12hs wrote:
[snip]
> > [To bad there's no tail recursion optimization.]  8-(
>
> That issue is much more complicated than you probably imagine.
[snip]

No imagination is necessary - functional languages (e.g., Erlang) do
it quite well.
-- 
http://mail.python.org/mailman/listinfo/python-list