Найдите сумму последовательных целых чисел w/o использованием цикла в JavaScript

Я ищу метод, чтобы сделать вычисления как:

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

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

5
задан Z. Zlatev 16 May 2010 в 08:28
поделиться

3 ответа

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, поэтому сумма = (n+1)/2 * 2 * n/2 = (n+1)/2*n.

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

7
ответ дан 18 December 2019 в 09:48
поделиться

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

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

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

2
ответ дан 18 December 2019 в 09:48
поделиться

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

1+2+3+...+n = n * (n+1) / 2
8
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: