Первых два ответа (старых из них), казалось бы, некорректной мне. В соответствии с этим discussion, который уже цитированной в одном из ответов, сумма первых 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)
Пример:
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
велики, что вам нужно эфф алгоритмов генерации чисел Фибоначчи. Вот очень хороший article, который объясняет один из способов сделать это.
I был бы очень рад узнать о применении этого ответа! – rjobidon 2010-12-05 03:51:35
Я думаю, что мы дразнили вас достаточно долго, в частности, с намеком о Бине (вместо этого вы должны использовать линейную алгебру, как намекали на ваш вопрос). Также будьте осторожны, что `F (m + 2) - F (n + 2) - 2` не совсем корректен, но вы можете понять это, учитывая, что сумма фибо # на n эффективна F (n + 2) - 1 (подсказка: вам нужна сумма _inclusive_ из F (n), и, следовательно, вам нужно вычесть сумму фибо # до «n-1» и _субъект_ из F (m + 2) -2). Во всяком случае ... он выглядит и пахнет, как «HOMEWORK», сообщество SO не должно слишком много помогать ;-) – mjv 2010-12-05 04:50:01
@mjv - это пахнет проблемой кодового соревнования для меня – Attila 2012-04-13 21:07:14