рони,
т.е. дан массив, индексы начала и конца, шаг, и надо найти сумму элементов, без цикла, рекурсии, всяких трюков с setInterval и т.д.? Синхронным кодом? Методы массивов использовать можно? |
:) смотрите пост №28 Nexus,
уберите циклы и верните сумму |
Цитата:
|
а, теперь понял.
Тут всё в кучу, в этом топике ) сумма арифметической прогрессии, в общем. По формуле все вычисляется |
Цитата:
|
Цитата:
|
Цитата:
только с шагом это не прокатит. |
сумма арифметической прогрессии
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 |
рони,
не, так бы я точно не смог. Я начал просто вот так в столбик расписывать и приводить к формуле: 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 + ........); |
Ошибки разобрал. Вот такая получается функция суммы последовательных чисел если делать через арифметическую формулу:
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)); |
| Часовой пояс GMT +3, время: 02:52. |