给定的等式是:
我尝试了以下内容:
def eqn_result (n):
return eqn_result_acc(n,2)
def eqn_result_acc(current_n, sum_so_far):
if current_n==1:
return sum_so_far
else:
next_p = sum_so_far * current_n
next_s = sum_so_far + current_n
return eqn_result_acc(current_n-1, sum_so_far+(next_p/next_s))
任何帮助都会很棒
答案 0 :(得分:1)
这应该有效:
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)
答案 1 :(得分:0)
你得到了什么结果?你有什么期望?有什么错误,如果有的话?
你是否被整数分裂所提升?第二个任期是3/2 = 1.5
。你正在使用所有整数。你需要让它们成为浮点数。