我需要编写一个程序来接收数字列表并显示累积总和,只有递归!
例如:
输入:
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([])
答案 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