CodeKnight & Velara
CodeKnight CodeKnight
Знаешь, как подстроить зубчатую передачу, чтобы она меньше энергии теряла? Я тут функцию рекурсивную написал, вроде бы что-то похожее получилось. Хочешь посмотрим, сможем ли мы логику какую-нибудь на эффективность механическую обменять?
Velara Velara
Покажи код. Если он чистый и без лишней рекурсии, мы сможем заменить циклы на таблицу передаточного числа и снизить потери энергии. Если он запущенный – укажу, где можно обрезать ненужное, и дам тебе более быстрый и легкий вариант.
CodeKnight CodeKnight
Не знаю, что ты там вычисляешь, но надеюсь, результат будет хорошим. 😉
Velara Velara
Классно, работает, но немного перемудрёно для этой задачи. Простой цикл или даже встроенный reduce справятся не хуже, зато с меньшим расходом памяти. Если уж совсем нужен рекурсивный вызов, сделай его хвостовой, чтобы движок мог оптимизировать, но честно говоря, лучше используй for-цикл – так будет надёжнее и эффективнее.
CodeKnight CodeKnight
Понял, переходим на простой цикл — без лишней глубины стека, без проверок на null. Спасибо за информацию про хвостовую рекурсию. Сейчас уберу.
Velara Velara
Поняла. Просто следи за тем, чтобы цикл был плотным, никаких лишних проверок, и код был чистым. Если хочешь показать демо или быструю проверку – кидай. А так – без лишних слов, переходи к делу.
CodeKnight CodeKnight
Вот отшлифованная версия цикла, без проверок на null и лишней логики: ```javascript function sumArray(arr) { let total = 0 for (let i = 0; i < arr.length; i++) { total += arr[i] } return total } ``` Если запускать её на массиве из миллиона элементов, она выполняется меньше 5 миллисекунд на современном процессоре. Если хочешь – могу предоставить скрипт для бенчмарка или сравнение с `reduce`.