我需要有关求和模式的帮助

时间:2014-02-06 12:04:22

标签: python design-patterns lambda sum

  

总和S(t):
  S(1)= 1
  S(2)= 4 + 1 + 4
  S(3)= 9 + 4 + 1 + 4 + 9
  S(4)= 16 + 9 + 4 + 1 + 4 + 9 + 16
  S(5)= 25 + 16 + 9 + 4 + 1 + 4 + 9 + 16 + 25

def combine(f, op ,n):
    result = f(0)
    for i in range(n):
        result = op(result, f(i))
    return result


def sum(t):
    f = lambda x: 2*(x**2)
    op = lambda x,y: x+y
    n = t+1
    return combine(f, op, n)

但是,我允许更改combine(f, op ,n)的定义。

有没有办法重新定义sum(t)以删除额外的1以便我的代码正确无误?

正确答案是:1,9,27,59,109

我的代码提供:2,10,28,60,110

1 个答案:

答案 0 :(得分:1)

combine使用range(n)因此始终从0开始计数;您无法避免将{1}添加到t以获得所需的结果。您需要对0的{​​{1}}和1参数进行特殊说明:

f

现在def sum(t): f = lambda x: 2 * (x**2) if x > 1 else x op = lambda x, y: x + y return combine(f, op, t + 1) f(0)分别返回f(1)0,产生预期的输出:

1