Я пытаюсь реализовать общую сумму 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
Не печатать и запускать программу
В настоящее время, как вы могли реализовать общую сумму?
Позвольте мне сначала указать, что сумма первых 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
ПРИМЕЧАНИЕ. При определении вышеприведенных функций я предполагал, что ввод функции всегда будет положительным целым числом, хотя Фибоначчи могут быть расширены, чтобы охватить все реальные и комплексные числа, как показано на этой странице вики.
Вам просто нужно вычислить сумму в цикле 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 один раз в каждом цикле.
на самом деле, я не думаю, что это должно быть настолько сложным, что последовательность фибоначчи очень интересна во многих случаях, например, если вы хотите подвести итог 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, является суммой чисел фибоначи вплоть до числа
Вы ссылаетесь на переменную сумму перед назначением.
Вы можете использовать переменную сумму внутри цикла 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)
Сделал некоторые изменения в вашем коде:
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)
Прежде всего, строка 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
fibo(i)
кsuma
на каждой итерации ... что еще?