递归累积和

时间:2012-11-12 16:30:13

标签: python

我需要编写一个程序,用def计算数字列表中的累积和,但只能用递归计算。 我做到了,但现在我需要编写相同的程序而不使用方法sum,但到目前为止还没有成功。 有什么想法吗?

我的代码:

def rec_cumsum(numbers):
        ''' Input: numbers - a list of numbers,
                Output: a list of cumulative sums of the numbers'''
        if len(numbers)==0: return numbers

        return rec_cumsum(numbers[:-1])+ [sum(numbers)]

输入:

1 [1,2,3]

2 [2, 2, 2, 3]

输出:

1 [1,3,6]

2 [2, 4, 6, 9]


我的代码没有sum

def rec_cumsum(numbers):
        ''' Input: numbers - a list of numbers,
                Output: a list of cumulative sums of the numbers'''
        if len(numbers) == 0: return numbers
        my_list=[]
        rec_cumsum(my_list + numbers)
        my_list[0]=numbers[0]
        rec_cumsum(my_list)
        temp_sum=my_list[0]+numbers[-1]
        my_list[0]=temp_sum
        return my_list

3 个答案:

答案 0 :(得分:3)

我会建议这样的事情而不添加额外的参数:

[增订]

def rec(n):
    if len(n) < 2: return n
    n[1] = n[0] + n[1]
    return [n[0]] + rec(n[1:])


print rec([1,2,3,4])
[1, 3, 6, 10]

答案 1 :(得分:2)

你能做的是: -

  • 创建临时列表(空列表)。
  • 将您的原始列表和空列表传递给您的方法。
  • 现在,当您第一次传递列表时,只需将原始列表中的第一个元素添加到其中即可。并使用列表的其余部分调用相同的方法。从第1个元素开始。
  • 在病房之后调用您的方法时,您需要获取现在已修改的原始列表的lasttemp list的{​​{1}}元素。并将总和添加到临时列表中作为新元素。
  • 最后,当原始列表的长度变为0.返回你的温度。

**这是上述步骤的代码。您可以将其与您实施的那个进行比较,并查看出错的地方: -

first element

答案 2 :(得分:2)

另一种解决方案是:

def rec(n):
    if len(n) < 2: return n
    rest = rec(n[:-1])
    return rest + [rest[-1] + n[-1]]

这个对我来说更直观..