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
答案 0 :(得分:0)
你的代码的第二个lambda中有一个错误:
lambda x: a*(r**(n-1))
我认为n
和x
实际上应该是同一个变量:
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)