Первые два ответа (самые старые) кажутся неверными для меня. Согласно этой дискуссии , которая уже упоминалась в одном из ответов, сумма первых n
чисел Фибоначчи определяется как:
SumFib(n) = F[n+2] - 1 (1)
Теперь давайте определим SumFib(m, n)
как сумму чисел Фибоначчи от m
до n
включительно (согласно требованиям OP) (см. Сноску). Итак:
SumFib(m, n) = SumFib(n) - SumFib(m-1)
Обратите внимание на второй член. Это так, потому что SumFib(m)
включает F[m]
, но мы хотим сумму от F[m]
до F[n]
включительно . Таким образом, мы вычитаем сумму до F[m-1]
из суммы до F[n]
. Простая математика в детском саду, не так ли? :-)
SumFib(m, n) = SumFib(n) - SumFib(m-1)
= (F[n+2] - 1) - (F[m-1 + 2] - 1) [using eq(1)]
= F[n+2] - 1 - F[m+1] + 1
= F[n+2] - F[m+1]
Therefore, SumFib(m, n) = F[n+2] - F[m+1] (2)
* 1 028 * Пример:
m = 3, n = 7
Sum = F[3] + F[4] + F[5] + F[6] + F[7]
= 2 + 3 + 5 + 8 + 13
= 31
И с помощью (2)
, полученного выше:
SumFib(3, 7) = F[7+2] - F[3+1]
= F[9] - F[4]
= 34 - 3
= 31
Бонус:
Когда m
и n
велики, вам нужны эффективные алгоритмы для генерации чисел Фибоначчи. Вот очень хорошая статья , которая объясняет один из способов сделать это.
Сноска: В вопросе m
и n
ОП удовлетворяют этому диапазону: 0 =< n <= m
, но в моем ответе диапазон немного изменен, он 0 =< m <= n
.