26.07.2018, 19:42
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
рони,
т.е. дан массив, индексы начала и конца, шаг, и надо найти сумму элементов, без цикла, рекурсии, всяких трюков с setInterval и т.д.? Синхронным кодом? Методы массивов использовать можно?
|
|
26.07.2018, 19:42
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
смотрите пост №28 Nexus,
уберите циклы и верните сумму
|
|
26.07.2018, 19:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от Alexandroppolus
|
Методы массивов использовать можно?
|
если это не цикл типа reduce и прочих, не знаю что может пригодится из этих методов.
|
|
26.07.2018, 19:47
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
а, теперь понял.
Тут всё в кучу, в этом топике )
сумма арифметической прогрессии, в общем. По формуле все вычисляется
|
|
26.07.2018, 19:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от Alexandroppolus
|
т.е. дан массив,
|
нет , только начало, предел и шаг
|
|
26.07.2018, 19:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от Alexandroppolus
|
По формуле все вычисляется
|
|
|
26.07.2018, 20:00
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
end * (end + 1) * 0.5
только с шагом это не прокатит.
|
|
26.07.2018, 20:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
сумма арифметической прогрессии
MC-XOBAHCK,
function fun(start, end, step) {
step = step || (start > end ? -1 : 1);
var n = (end - start) / step | 0;
return (start + n * step / 2) * ++n
}
alert(fun(10, 1, -1));
alert(fun(1, 10, 1));
alert(fun(10, 1));
alert(fun(1, 10));
https://javascript.ru/forum/misc/731...-shagom-2.html
|
|
26.07.2018, 21:02
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
рони,
не, так бы я точно не смог.
Я начал просто вот так в столбик расписывать и приводить к формуле:
n +
(n + 1) +
(n + 2) +
(n + 3) +
(n + 4) +
(n + 5)
=
n + n * (1 + 2 + 3 + 4 + 5 + ........);
получается в скобках выражение заходит под формулу: end * (end + 1) * 0.5, но в ней end = end - start
start + start * ((end - start) * (end - start + 1) * 0.5)
Это получилась формула для последовательных чисел, если не наделал ошибок.
А как к ней шаг прикрутить я завис без каких либо идей.
+++++++++++++
Запустил на тест и сразу вижу 2 ошибки когда n выносил как множитель в прорисовке макета формулы.
n * (1 + 2 + 3 + 4 + 5 + 6 + ........);
Последний раз редактировалось MC-XOBAHCK, 26.07.2018 в 21:19.
|
|
26.07.2018, 21:25
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Ошибки разобрал. Вот такая получается функция суммы последовательных чисел если делать через арифметическую формулу:
function sum(start, end) {
return start * ((end - start + 1) * (end - start + 2) * 0.5);
}
console.log(sum (1, 4)); // 10
!!! Функция работает НЕПРАВИЛЬНО!!! Где то ошибка в формуле, не могу понять.
console.log(sum(2, 5));
Последний раз редактировалось MC-XOBAHCK, 26.07.2018 в 21:57.
|
|
|
|