Sum Series with Functions-непрерывное добавление предыдущих ответов?

Я изучаю концепции функций в Python и мог бы использовать небольшой совет.

Я пытаюсь написать программу, которая будет использовать алгебраическую функцию m(i) = (i) / (i + 1)для входов с 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

I feel like i’m off to a good start, but how can I add all the m(i) together for each new line? Как и в «идеальном» примере, который я опубликовал, требуется 0.5 + 0.67, давая 1.17 и так далее.

Заранее спасибо!

5 ответов

  1. Попробовать это:

    def equation(i):
        if i <= 0:
            return 0
        mi = ((i) / (i + 1))
        return mi + equation(i - 1)
    
  2. Вам просто нужен аккумулятор, чтобы сохранить значения уравнения (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'))
    
  3. Вы можете сделать что-то подобное.

    #!/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()
    
  4. Вы могли бы сделать это с генератором:

    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'))
    
  5. def function(i):
        return i/(i+1)
    
    e = 0
    for i in range(1, 21):
        print(i, end=' ')
        e += function(i)
        print(e)
    

    Кажется, вам просто нужно увеличить результирующий возврат от функции к переменной.Удачи!