2014-02-06 87 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