0

给定的方程是:

我尝试了以下方法:

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))

任何帮助都会很棒

4

2 回答 2

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)
于 2013-06-18T10:04:29.467 回答
0

你得到了什么结果?你期待什么?什么错误,如果有的话?

难道是你被整数除法吊起来了?第二个术语是3/2 = 1.5。您正在使用所有整数。您需要将它们设为浮点数。

于 2013-06-18T10:01:39.150 回答