为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

四季花海 2021-03-30 21:06:11
给定的等式为:我尝试了以下方法: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))任何帮助都会很棒
查看完整描述

2 回答

?
精慕HU

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)


查看完整回答
反对 回复 2021-04-02
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

你得到了什么结果?您期望什么?有什么错误(如果有)?

可能是您被整数除法了吗?第二个学期是3/2 = 1.5。您正在使用所有整数。您需要使它们成为浮点数。


查看完整回答
反对 回复 2021-04-02
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信