Сумма N чисел в числах Фибоначчи - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь реализовать общую сумму N целых чисел в Фибоначчи

def fibo(n):
    if n<2:
        return 1
    else:
        res = fibo(n-1) + fibo(n-2)
        sum = sum + res
        return res, sum

n=7
sum = 0
for i in range(1, n):
    print(fibo(i))

print("Suma", sum)

#example: if n=7 then print : 1,1,2,3,5,8,13 and sum is 32

У меня ошибка, когда я ставлю sum = sum + res Не печатает и не запускает программу

В настоящее время, как вы могли бы реализовать общую сумму?

Ответы [ 6 ]

0 голосов
/ 25 сентября 2018

на самом деле я не думаю, что это должно быть настолько сложным, что последовательность Фибоначчи очень интересна с точки зрения разных способов, например, если вы хотите подвести сумму до 7-го числа Фибоначчи, то проверили, что такое 9-е число Фибоначчи - 1является?Теперь, как мы можем найти n-ое число Фибоначчи?

p = (1+5**.5)/2
q = (1-5**.5)/2
def fibo(n):
    return 1/5**.5*(p**n-q**n)

, и теперь мы можем найти сумму до любого числа в одном вычислении!например, для 7

fibo(9)- 1

вывод

33

и каков фактический ответ

1+1+2+3+5+8+13=33

итоговая сумма: число Фибоначчито есть в двух местах дальше по последовательности минус 1 - сумма чисел Фибоначчи до числа

0 голосов
/ 25 сентября 2018

Позвольте мне сначала указать, что сумма первых 7 членов последовательности Фибоначчи не равна 32 .Эта сумма составляет 33 .Теперь к проблеме.Вот как бы я решил проблему.Сначала я определил бы функцию, которая вычисляет n -й член последовательности Фибоначчи, следующим образом:

def fibo(n):
    if n in [1,2]:
        return 1
    else:
        res = fibo(n-1) + fibo(n-2)
    return res

Затем я бы определил функцию для вычисления суммы первого n члены последовательности Фибоначчи следующие:

def sum_fibo(n):
    res = [fibo(i) for i in range(1, n+1)]
    print(res)
    return sum(res)

Так что если я сделаю

[In] sum_fibo(7)

, я получу

        [1, 1, 2, 3, 5, 8, 13]
out >>> 33

NOTE : Определяя функции выше, я предположил, что ввод функции всегда будет положительным целым числом, хотя Фибоначчи можно расширить, чтобы охватить все действительные и комплексные числа, как показано на этой вики-странице .

0 голосов
/ 25 сентября 2018

Вы передаете переменную sum перед присваиванием.

Возможно, вы захотите использовать переменную sum внутри цикла for и присвоить ей волокно.

    def fibo(n):
        if n<2:
            return 1
         else:
            return fibo(n-1) + fibo(n-2)


n=7
sum = 0
for i in range(1, n):
    sum +=  fibo(i)
    print(fibo(i))

print("suma", sum)
0 голосов
/ 25 сентября 2018

Вам просто нужно вычислить сумму в цикле for, а не в fibo (n).Вот взгляните:

def fibo(n):
if n<2:
    return 1
else:
    res = fibo(n-1) + fibo(n-2)
    return res

n=7
sum = 0
for i in range(0, n):
    r = fibo(i)
    sum += r
    print(r)

print("Suma", sum)

Я использовал r для вызова fibo один раз в каждом цикле.

0 голосов
/ 25 сентября 2018

Прежде всего, строка sum = sum + res не имеет смысла, потому что вы никогда не определяли sum в первую очередь.

Итак, ваша функция должна выглядеть следующим образом:

def fibo(n):
    if n<2:
        return 1
    else:
        return fibo(n-1) + fibo(n-2)

Во-вторых, вы можете получить сумму, просто

sum_ = 0
for i in range(0, n):
    sum_ += fibo(i)

Или, может быть,

sum_ = sum(fibo(i) for i in range(0, n))

Обратите внимание, что последний будет работать, только если вы не переопределите встроенную функцию с именем sum

0 голосов
/ 25 сентября 2018

Внесены некоторые изменения в ваш код:

def fibo(n):
    print(1)
    counter = 1
    old_num = 0
    new_num = 1
    sum_fib = 1
    while counter < n:
        fib = old_num + new_num
        print(fib)

        if counter < n:
            old_num = new_num
            new_num = fib
            sum_fib = sum_fib + fib
            counter = counter + 1

    print('sum:' + str(sum_fib))


#fibo(5)
...