如何使用递归函数来计算列表中正元素的总和?

时间:2017-04-03 06:38:09

标签: python python-3.x recursion

如何使用递归函数计算列表中正元素的总和?

我不确定该如何去做?我知道如何在不使用递归函数的情况下执行此操作:

sum=0
for i in range(len(List)):
    if List[i]>0:
        sum=sum+List[i]

4 个答案:

答案 0 :(得分:1)

您需要将问题划分为' current'步骤和其余由递归处理。您还需要确定何时结束递归。

  • 目前的步骤是确定此步骤中的总和。这是当前值,如果值小于0,则为0
  • 余下的是将当前值与列表其余部分的递归调用相加。
  • 传入空列表时结束递归;空列表的总和始终为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