调用func。改变输入

时间:2012-11-15 12:20:43

标签: python

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

例如:

输入:

1,2,3

输出:

1,3,6

我的问题是我有一些测试要在函数上运行,我必须为所有这些都得到真实,但我得到假b / c我的func更改输入。 有人知道如何解决它? (当然,我无法改变测试..)

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([])

2 个答案:

答案 0 :(得分: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:])

答案 1 :(得分: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