2 回答
TA贡献1845条经验 获得超8个赞
那应该工作:
import operator
def foo(n):
if n == 0:
return 1
l = range(1, n + 1)
top = sum(l)
bottom = reduce(operator.mul, l, 1)
return foo(n - 1) + float(top) / float(bottom)
现在,如果要使用累积结果来完成此操作,则需要存储成瘾和产品,例如:
def foo(step, n, r, s, p):
if n == step:
return r
s += step + 1
p *= step + 1
r += float(s) / float(p)
return foo(step + 1, n, r, s, p)
def bar(n):
return foo(0, n, 1, 0, 1)
只是为了好玩,这是第三个版本,以某种方式更有意义,但是它是非累加的,因为它首先计算总和和乘积,然后在每个步骤将它们递减:
def foo(n, s, p):
if n == 0:
return 1
return float(s) / float(p) + foo(n - 1, s - n, p / n)
def bar(n):
l = range(1, n + 1)
s = sum(l)
p = 1
for e in l: p *= e
return foo(n, s, p)
TA贡献1796条经验 获得超4个赞
你得到了什么结果?您期望什么?有什么错误(如果有)?
可能是您被整数除法了吗?第二个学期是3/2 = 1.5
。您正在使用所有整数。您需要使它们成为浮点数。
添加回答
举报