0

致力于编写一个看似简单的函数来查找事物的累积。它非常抽象,它的签名是这样的:

def accumulate(combiner, start, n, term):
    """Return the result of combining the first n terms in a sequence."""
    "*** YOUR CODE HERE ***"

关于这个问题的更多信息:

“Accumulate 将相同的参数 term 和 n 作为总和和乘积作为参数,以及一个组合器函数(两个参数),它指定如何将当前项与前面项的累加组合,以及一个指定什么的起始值用于开始累积的基础值。” ——来自加州大学伯克利分校 CS61A 2013 年秋季,John DeNero

"Combiner" 是指从 "start" 到 "n" 的术语将被累加的方式(可以是 add、sub、mul 等)。组合器最多需要 2 个参数。

“术语”是指应用于以“start”开头并以“n”结尾的每个术语的函数。这可能意味着取每一项的平方、sqrt、n%//2。

我想在不必使用 functools.reduce 的情况下解决这个问题。

我知道我必须制作一个函数组合循环,但这是让我感到困惑的部分。然后,我必须让每个函数接受两个参数:旧累积和当前项。

我已经为此工作了 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”是指我不能开始在 term(n) 上执行组合器功能,直到我至少有 n 项。但是后来我变得困惑,因为我必须在存储旧总和并更新它的同时继续组合最后两个值。

4

1 回答 1

4

您不需要在函数中使用函数。只需执行以下操作:

def accumulate(combiner, start, n, term):
    """Return the result of combining the first n terms in a sequence."""
    total = term(start)
    current = start
    while current < n:
        total = combiner(total, term(current))
        current += 1
    return total
于 2013-12-30T22:22:21.767 回答