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


如何使用

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

我不知道该怎么做?我知道如何在不使用递归函数的情况下做到这一点:

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

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

  • 当前步骤是确定在此步骤中求和的内容。这是当前值,如果值小于 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
这可能是

一个 wy 这样做。

def fun(l):
    if len(l)==0:
        return 0
    num = l.pop()
    if num > 0:
        return num + fun(l)
    return fun(l)

但要小心。 此函数会销毁 Benn 传递给它的列表。 因此,在将列表传递给函数之前,请先复制列表,或者:

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:])
<</div> div class="one_answers">

将 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

作为一个没有递归的新学习者,我会再写几行代码,如下所示。这是针对将数字相加到 n 的问题。

def sum_positive_numbers(n):
    # Initialise variables
    sum=0
    i=1
    while i<n+1:
        sum=sum+i
        i+=1
    return sum

最新更新