1

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
4

3 に答える 3

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]
于 2012-11-12T16:58:21.263 に答える
2

さらに別の解決策は次のとおりです。

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

これは私にとってより直感的に感じます。

于 2012-11-16T20:55:00.400 に答える
2

あなたができることは: -

  • 一時リスト (空のリスト) を作成します。
  • メソッドで元のリストと空のリストを渡します。
  • リストを初めて渡すときは、元のリストの最初の要素をリストに追加するだけです。リストの残りの部分で同じメソッドを呼び出します。1 番目の要素から開始します。
  • あなたのメソッドがワードの後に​​呼び出されるとき、あなたの要素と現在変更されている元のリストのlast要素の合計を取る必要があります。そして、合計を新しい要素として一時リストに追加します。temp listfirst element
  • 最後に、元のリストの長さが 0 になったら、temp を返します。

**上記の手順のコードは次のとおりです。実装したものと比較して、どこが間違っているかを確認できます。

def rec_cumsum(numbers):
    if len(numbers) == 0 : return temp

    # You need to check, if `temp` is empty, that means method is called first time.
    if not temp:   
        temp.extend([numbers[0]])   // Just add the first element to it.

    else:
        # Else, get the last element from `temp`, 
        # add it to `first elemt` in `numbers` and add it to `temp`.
        temp.extend([temp[-1] + numbers[0]])

    return rec_cumsum(numbers[1:])

my_list = [2, 2, 2, 3]
temp = []
print rec_cumsum(my_list)
于 2012-11-12T16:34:31.967 に答える