我无法将递归代码从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)
答案 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似乎认为它不值得担心,因为你总是可以将它重新编码为循环。