物事の蓄積を見つける一見単純な関数の作成に取り組んでいます。これは非常に抽象的で、署名は次のとおりです。
def accumulate(combiner, start, n, term):
"""Return the result of combining the first n terms in a sequence."""
"*** YOUR CODE HERE ***"
この質問の詳細:
「Accumulate は、合計と積と同じ引数 term と n を引数として取り、現在の項を前の項の累積とどのように結合するかを指定する (2 つの引数の) コンバイナ関数と、何を指定するかを指定する開始値を指定します。累積を開始するために使用する基準値。」-- カリフォルニア大学バークレー校 CS61A 2013 年秋、John DeNero より
「コンバイナ」とは、「開始」から「n」までの用語が累積される方法を指します (add、sub、mul など)。コンバイナーは最大 2 つの引数を取ります。
「項」とは、「開始」で始まり「n」で終わる各項に適用される機能を指します。これは、各項の 2 乗、sqrt、n%//2 を取ることを意味する場合があります。
functools.reduce を使用せずにこの問題に取り組みたいと考えています。
関数合成のループを作らなければならないことはわかっていますが、ここが私を混乱させる部分です。そして、各関数に 2 つの引数 (古い累積と現在の項) を取らせる必要があります。
私はこれに2日間取り組んできましたが、自分自身をたくさん混乱させたので、私のコードはめちゃくちゃです. 助言がありますか?
def accumulate(combiner, start, n, term):
"""Return the result of combining the first n terms in a sequence."""
now=0
while start+now+1<=n:
def combiner(x,y):
old=combiner(start+now,start+now+1)
old=combiner(old,start)
now+=1
return old
「start+now+1」とは、少なくとも n の項を取得するまで、term(n) でコンバイナ関数の実行を開始できないという事実を指します。しかし、古い合計を保存して更新しながら、最後の2つの値を結合し続ける必要があるため、混乱します。