Сумма N чисел в числах Фибоначчи

1

Я пытаюсь реализовать общую сумму 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 Не печатать и запускать программу

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

  • 1
    ....Так....? Похоже, это работает. В чем дело? Просто добавьте fibo(i) к suma на каждой итерации ... что еще?
  • 2
    Вы забыли самую важную часть задавания вопроса, которая задает вопрос.
Показать ещё 6 комментариев
Теги:
jupyter-notebook
python-3.x
fibonacci

6 ответов

1

Позвольте мне сначала указать, что сумма первых 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

ПРИМЕЧАНИЕ. При определении вышеприведенных функций я предполагал, что ввод функции всегда будет положительным целым числом, хотя Фибоначчи могут быть расширены, чтобы охватить все реальные и комплексные числа, как показано на этой странице вики.

1

Вам просто нужно вычислить сумму в цикле 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

на самом деле, я не думаю, что это должно быть настолько сложным, что последовательность фибоначчи очень интересна во многих случаях, например, если вы хотите подвести итог 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

summa summaryum: число фибоначи, которое находится в двух местах ниже последовательности минус 1, является суммой чисел фибоначи вплоть до числа

0

Вы ссылаетесь на переменную сумму перед назначением.

Вы можете использовать переменную сумму внутри цикла 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

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

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)
  • 0
    Любая причина, почему вы перешли от рекурсивной функции к циклу?
  • 0
    На самом деле, нет. Не сказал, что это должно быть рекурсивно
0

Прежде всего, строка 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню