-1

再帰のみを使用して、数値のリストを受け取り、累積合計を表示するプログラムを作成する必要があります。

例えば:

入力:

1,2,3

出力:

1,3,6

私の問題は、関数で実行するテストがいくつかあり、それらすべてに対して true を取得する必要があることですが、関数が入力を変更すると false になります。誰かがそれを修正する方法を知っていますか? (もちろん、テストを変更することはできません..)

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

2 番目のリストを使用します。

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 に答える