2016-09-30 32 views
0

我正在學習Python中的函數的概念,可以使用一點建議。帶功能的Sum系列 - 連續添加以前的答案?

我想寫將用於輸入1的代數函數m(i) = (i)/(i + 1)至20到目前爲止,我已經得到了工作程序,但現在我想以前的所有輸出加在一起爲每個新的輸出。這可能是我只是沒有理解這個數學概念,這就是爲什麼我沒有在我的代碼中正確的。

理想的情況下,這將是我想要得到的結果表:

i  m(i)  

1  0.50 
2  1.17 
... 
19 16.40 
20 17.35 

目前我有什麼是:

def equation(i): 
    mi = ((i)/(i + 1)) 
    return mi 

def main(): 
    for i in range(1,21): 
    print(format(i, '2d')," ",format(equation(i), '.2f')) 

main() 

我看到在我的殼輸出爲:

1  0.50 
2  0.67 
3  0.75 
4  0.80 
5  0.83 
6  0.86 
7  0.88 
8  0.89 
9  0.90 
10  0.91 
11  0.92 
12  0.92 
13  0.93 
14  0.93 
15  0.94 
16  0.94 
17  0.94 
18  0.95 
19  0.95 
20  0.95 

我覺得我有一個良好的開端,但我怎麼可以添加所有的M(1)共同爲每一個新行?就像我發佈的'理想'例子一樣,它需要0.5 + 0.67給出1.17等等。

預先感謝您!

回答

0

試試這個:

def equation(i): 
    if i <= 0: 
     return 0 
    mi = ((i)/(i + 1)) 
    return mi + equation(i - 1) 
+0

我簡直不敢相信那很簡單,謝謝Hydex!現在我只需要研究這段代碼並試着理解它爲什麼起作用 – Norr

+0

如果您需要更多關於遞歸函數的信息,請參閱此鏈接[python-course](http://www.python-course.eu/recursive_functions.php )和[Wiki](https://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_3/Recursion) – Hydex

0

你只需要一個蓄電池,以節省方程(I)的值

這裏是我的解決方案:

def equation(i): 
    mi = ((i)/(i + 1)) 
    return mi 

acc = 0 
for i in range(1,21): 
    acc += equation(i) 
    print(format(i, '2d')," ",format(acc, '.2f')) 
0

你可以做這樣的事情。

#!/usr/bin/python 

def equation(i): 
    mi = (float(i)/(i + 1)) 
    return mi 

def main(): 
    sumOfMi = 0 
    for i in range(1,21): 
     sumOfMi+= equation(i) 
     print(format(i, '2d')," ",format(sumOfMi, '.2f')) 

main() 
0

你可以用發電機做到這一點:

def equation(i): 
    n = 0 
    tot = 0 
    while n < i: 
     n += 1 
     mi = n/(n+n) 
     tot += mi 
     yield n, tot 

def main(): 
    for i, mi in equation(21): 
     print(format(i, '2d')," ",format(mi, '.2f')) 
0
def function(i): 
    return i/(i+1) 

e = 0 
for i in range(1, 21): 
    print(i, end=' ') 
    e += function(i) 
    print(e) 

好像你只需要增加從功能variable.Good運氣得到的回報!