Найти сумму последовательных целых чисел без использования цикла в JavaScript - PullRequest
5 голосов
/ 16 мая 2010

Я ищу метод для расчетов, например:

function sumIntegerUpTo(number) {
  return 1+2+3+...+number;
}

Если вы передадите number как 5, функция должна вернуть сумму 1+2+3+4+5. Мне интересно, можно ли обойтись без петель.

Ответы [ 3 ]

8 голосов
/ 16 мая 2010

Конечно, это так!

1+2+3+...+n = n * (n+1) / 2
7 голосов
/ 16 мая 2010
function sumIntegerUpTo(number) {
    return (1 + number) * number / 2;
}

Я могу придумать два простых способа запомнить эту формулу:

  • Подумайте о сложении чисел с обоих концов последовательности: 1 и n, 2 и n-1, 3, n-2 и т. Д. Каждая из этих маленьких сумм в итоге становится равной n + 1.Оба конца будут заканчиваться в середине (в среднем) последовательности, поэтому их должно быть в общей сложности n / 2.Таким образом, сумма = (n + 1) * (n / 2).

  • Число равно среднему числу (то есть (1 + n) / 2), сколько послеи добавление пары чисел, которые равноудалены от этого среднего, всегда приводит к удвоению среднего, и есть n / 2 пары, поэтому sum = (n + 1) / 2 * 2 * n / 2 = (n + 1)/2*n.

Вы можете довольно легко расширить приведенные выше рассуждения на другой начальный номер, дав вам: сумма (числа от a до b включительно) = (a + b)/2*(b-a+1).

2 голосов
/ 16 мая 2010

Или вы можете использовать рекурсивный подход - который здесь избыточен, если есть простая формула! Но в рекурсии всегда есть что-то классное и волшебное!

function addToN(n)
{
    if(n==0) return 0;
    else return n + addToN(n-1);
}

Отредактировано для работы с 0!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...