如何使用递归函数计算列表中正元素的总和?
我不确定该如何去做?我知道如何在不使用递归函数的情况下执行此操作:
sum=0
for i in range(len(List)):
if List[i]>0:
sum=sum+List[i]
答案 0 :(得分:1)
您需要将问题划分为' current'步骤和其余由递归处理。您还需要确定何时结束递归。
0
。最后,这给出了:
def recursive_positive_sum(l):
# end recursion for an empty list
if not l:
return 0
# get a value
value = l[0]
if value < 0:
value = 0
# recurse, sum the value with the remainder
return value + recursive_positive_sum(l[1:])
我们可以使用max()
获取值或0
并内联:
def recursive_positive_sum(l):
if not l:
return 0
return max(l[0], 0) + recursive_positive_sum(l[1:])
演示:
>>> def recursive_positive_sum(l):
... if not l:
... return 0
... return max(l[0], 0) + recursive_positive_sum(l[1:])
...
>>> recursive_positive_sum([])
0
>>> recursive_positive_sum([-42])
0
>>> recursive_positive_sum([-42, 10, -81, 100])
110
答案 1 :(得分:0)
这可能就是这样做的一个原因。
def fun(l):
if len(l)==0:
return 0
num = l.pop()
if num > 0:
return num + fun(l)
return fun(l)
但要小心。这个函数破坏了传递给它的列表。所以在将列表传递给函数之前复制一下列表,或者:
def fun(l):
if len(l)==0:
return 0
if len(l)==1:
return l[0]
num = l[0]
if num > 0:
return num + fun(l[1:])
return fun(l[1:])
答案 2 :(得分:0)
实现sum_positive_numbers函数,作为递归函数,该函数返回接收到的数字n与1之间的所有正数之和。[已解决]
def sum_positive_numbers(n):
if n <= 1:
return n
return n + sum_positive_numbers(n-1)
print(sum_positive_numbers(3)) # Should be 6
print(sum_positive_numbers(5)) # Should be 15
答案 3 :(得分:0)
作为一个没有递归的新学习者,我将再写几行代码,如下所示。这是为了将数字加到n。
def sum_positive_numbers(n):
# Initialise variables
sum=0
i=1
while i<n+1:
sum=sum+i
i+=1
return sum