-1

我需要编写一个程序来接收数字列表并显示累积和,只有递归!

例如:

输入:

1,2,3

输出:

1,3,6

我的问题是我有一些测试要在函数上运行,我必须对所有这些测试都正确,但是我得到了错误的 b/c 我的函数更改了输入。有人知道如何解决它吗?(当然我不能改变测试..)

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
        if len(numbers) == 1 : return numbers
        numbers[1] = numbers[0] + numbers[1]
        return [numbers[0]] + rec_cumsum(numbers[1:])

### Testing code

def test_rec_cumsum(numbers):
        return rec_cumsum(numbers) == [sum(numbers[:i]) for i in range(1,len(numbers)+1)]

import random
print test_rec_cumsum([1,2,3])
print test_rec_cumsum(random.sample(range(100),30))
print test_rec_cumsum([])
4

2 回答 2

2

这基本相同,但不会改变数字的值。

def rec_cumsum(numbers):
    if len(numbers) == 0 : return numbers
    if len(numbers) == 1 : return numbers
    return [numbers[0]] + rec_cumsum([numbers[0]+numbers[1]] + numbers[2:])
于 2012-11-15T12:30:29.577 回答
0

使用第二个列表:

def rec_cumsum(numbers):
    if len(numbers) == 0: return []
    sums = [ numbers[0] ]
    for i in range(1, len(numbers)):
        sums.append(sums[i-1] + numbers[i])
    return sums
于 2012-11-15T12:26:04.663 回答