2014-02-06 57 views
0

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

不过,我不允许改变defini combine(f, op ,n)

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

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

我的代码给出:2,10,28,60,110

回答

1

combine使用range(n)所以总是从0开始计数;您无法避免将1加到t以获得理想的结果。分别

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)回报01,产生预期的输出:你需要特殊情况下,01参数f

>>> for i in range(1, 6): 
...  print 'sum({}) => {}'.format(i, sum(i)) 
... 
sum(1) => 1 
sum(2) => 9 
sum(3) => 27 
sum(4) => 59 
sum(5) => 109 
+0

感谢您的帮助! – user3234828