在Python中使用累积递归生成给定方程的结果

给定的等式为:

http://img1.mukewang.com/6066cfa00001a16103380039.jpg

我尝试了以下方法:

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

任何帮助都会很棒


四季花海
浏览 184回答 2
2回答

精慕HU

那应该工作:import operatordef 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)

慕的地8271018

你得到了什么结果?您期望什么?有什么错误(如果有)?可能是您被整数除法了吗?第二个学期是3/2 = 1.5。您正在使用所有整数。您需要使它们成为浮点数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python