调试python中的几何系列

时间:2014-02-05 11:27:03

标签: python fold

def fold2(op, term, a, next, b, base): 
    if a > b:
        return base
    else:
        return op (term(a), fold2(op, term, next(a), next, b, base))



def geometric_series(a, r, n):
    return fold2(lambda x,y: x+y, lambda x: a*(r**(n-1)), 1, lambda n: n+1, n, a)

有人可以帮我解决这个问题。假设给出几何系列,但我只允许更改 def geometric_series(a,r,n)部分。怎么了?

a)geometric_series(1 / 2,1 / 2,3)= 0.875(正确)

b)geometric_series(1,2,4)= 33(错误)正确答案是15

3 个答案:

答案 0 :(得分:0)

你的代码的第二个lambda中有一个错误:

lambda x: a*(r**(n-1))

我认为nx实际上应该是同一个变量:

lambda t: a*(r**(t-1))

除此之外,我将 fold2 的第三个参数从1更改为2,一切都按预期工作。

答案 1 :(得分:0)

fold2的第三个参数应该具有相同的变量。两者都是n或两者都是x。此外,您的最终参数,即基本情况,应为0

答案 2 :(得分:0)

只需添加,基数应该是0而不是a,如果不是你的测试用例,则会增加1。

def geometric_series(a,r,n):     return fold2(lambda x,y:x + y,lambda n:a *(r **(n-1)),1,lambda n:n + 1,n,0)