Помогите разобраться с функцией

70
08 февраля 2022, 09:10

Задача заключается в том, чтобы создать функцию, которая возвращает сумму последовательности целых чисел. Последовательность определяется 3 значениями: начало, конец, шаг. Например:

sequenceSum (2,6,2) === 12 // 2 + 4 + 6
sequenceSum (1,5,1) === 15 // 1 + 2 + 3 + 4 + 5
sequenceSum (1,5,3) === 5 // 1 + 4

Я делаю так:

  function sequenceSum (a, b, c) {
    let arr = [];
    let sum = 0;
    while (sum < b) {
      arr.push(sum += c)
    }
    console.log(arr.reduce((prev, current) => prev + current));
    }

Но проблема в том, что если число "а" отличается от "c", то результат будет ошибочный.

Answer 1

Могу предложить более быстрое решение. Оригинальная формула суммы последовательности от 1 до N - это N*(N+1)/2. Нам лишь нужно учесть пару моментов:

function sum(a, b, i) { 
  let min = Math.min(a, b) - i 
  let r = Math.abs(a - b) 
  let N = Math.trunc(r / i) + 1 
  return N * min + i*(N*(N+1)/2) 
} 
 
console.log(sum(1, 3, 1)) // 6 
console.log(sum(3, 5, 1)) // 12 
console.log(sum(2, 6, 2)) // 12 
console.log(sum(3, 7, 2)) // 15 
console.log(sum(1, 5, 2)) // 9 
 
console.log(sum(1, 4, 3)) // 5 
console.log(sum(1, 5, 3)) // 5 
console.log(sum(1, 6, 3)) // 5 
console.log(sum(1, 7, 3)) // 12

Как видите, можно обойтись без циклов и массивов. И по времени быстрее и по памяти менее напряжно.

READ ALSO
очередность JS Opacity [дубликат]

очередность JS Opacity [дубликат]

По клику на кнопку, должна меняться прозрачность div с "ТЕКСТ1", потом должен плавно появлятся "ТЕКСТ2" в этом блоке

81
Cannot read property &#39;value&#39; of null (JavaScript)

Cannot read property 'value' of null (JavaScript)

Решил попробовать изучить JavaScriptУ меня есть текстовое поле: с ID "login-area"

80