-1

我无法将一段递归代码从 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' and 'list' 的不支持的操作数类型。有关如何解决此问题的任何建议?谢谢!

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

4 回答 4

4

你可以使用

sum(arr)

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

于 2013-01-08T19:54:48.917 回答
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

于 2013-01-08T20:01:26.053 回答
0

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

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

于 2013-01-08T19:59:21.440 回答
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 似乎认为这不值得担心,因为您总是可以将其重新编码为循环。

于 2013-01-08T19:59:30.383 回答