递归地总结列表中的元素;蟒蛇

时间:2013-01-08 19:52:41

标签: python recursion

我无法将递归代码从Java转换为Python。所有这个函数都是对数组(或列表)中的元素进行总结。

public static int Summ(int [] arr, size)
{
   if(size == 0)
      return 0
   else
    return arr[size-1] + Summ(arr,size-1);

}  <-- works fine

但是,在Python中,我收到此错误消息:TypeError:+:'int'和'list'的不支持的操作数类型。有关如何解决此问题的任何建议?谢谢!

def Sum(arr,size):
   if size == 0:
     return 0
   else:
     return arr[size-1] + Summ(arr,size-1)

4 个答案:

答案 0 :(得分:4)

你可以使用

sum(arr)

这将返回列表中值的总和。

答案 1 :(得分:3)

def Sum(arr,size):
   if size == 0:
     return 0
   else:
     return arr[size-1] + Sum(arr,size-1)

a=[1,2,3]  
b=Sum(a,3)
print b

打印6

答案 2 :(得分:0)

如果没有看到Python代码,很难确切知道发生了什么,但根据错误消息,您的Summ方法可能会返回一个列表而不是一个int。

如果Summ对象确实返回了一个int,那么arr对象实际上可能包含一个列表列表。

答案 3 :(得分:0)

如果你真的希望这是“尾巴”递归:

def Sum(lst):
    if not lst:
        raise ValueError("Summing an empty iterable?  That's nonsense")
    return lst[0]+Sum(lst[1:]) if len(lst) > 1 else lst[0]

但内置sum函数绝对是一个更好的选择 - 它适用于任何迭代,它将更有效,并且没有机会使用它来达到递归限制。

Python并不像许多其他语言那样为尾递归而构建。 Guido似乎认为它不值得担心,因为你总是可以将它重新编码为循环。