Другие языки программирования и технологии

Стоит ли использовать рекурсию в целом? (+)

- код реализации более лаконичный, но не всегда сразу понятный
- работает медленнее чем for петля (делал тест)
- есть ограничения по стаку, 9000-10000 позволительная глубина максимум если больше stackOverflow ошибка возникает

Вот делал реализацию функций, это сравнительный тест возведения 2-ки в степень 8500.
Одну функцию с помощью рекурсии, вторую с помощью for петли. Каждую из функций запускал 40 раз, чтобы подсчитать время которое требуется на выполнение. (результаты на картинке)

Как понимаю for петля также дополнительно оптимизируется движком (в данном случае в Node.Js).

Как Вы считаете стоит ли использовать рекурсию в целом?
Если да, то в каких случаях это будет оптимально?

Заранее благодарен за норм ответы =)
Рома Пахтаев
Рома Пахтаев
68 836
1. Нужно знать, как оптимизируется рекурсия и что такое хвостовая рекурсия и способен ли компилятор на её оптимизацию. Здесь зависит от языка и компилятора.
2. Для взятия в степень существует более оптимальный алгоритм, чем просто умножать на 2 много раз.
3. Нет, стараться втиснуть рекурсию без необходимости смысла нет.
D1Yaz Khamz1N
D1Yaz Khamz1N
50 849
Лучший ответ
Рома Пахтаев Спасибо за Ваш ответ!
Рома Пахтаев К сожалению в JS не везде
ну... как бы в си++ оптимизаторы сами раскручивают в фор эту рекурсию... на сколько я помню, но если не много вызовов, то можно и рекурсию, а если от неё только стек разворачивается и разворачивается, то конечно жопа, особенно если сложные объекты. Но я так редко использую рекурсию со сложными объектами, что даже проблем как-то не встречал.
Рома Пахтаев Спасибо Вам!
Проблема рекурсии в ее жоре памяти, если рам достаточно она быстрее чем луп
Павел Чернин
Павел Чернин
84 801
Василий Пантелеев Не быстрее рекурсия цикла. Почитай как происходит вызов функции.
Или книгу "Цифровая схемотехника и архитектура компьютера". (Харрис)
Бека Олимов В описании вопроса дан результат теста, где видно, что рекурсия работает медленней.
Рома Пахтаев Спасибо за ваш ответ, но рекурсия медленнее работы for петли
Рома Пахтаев также имеет ограничения по глубине
Рекурсия широко используется в функциональных языках. В обычных (императивных) языках рекурсию применяют по необходимости (точнее: если она существенно упрощает код).
И в функциональных языках обычно тоже есть циклы (хотя это нарушение функциональной парадигмы)
SL
Snake Lowrider
58 065
Рома Пахтаев Спасибо за Ваш ответ! нашел пример где рекурсия намного эффективней и проще в использовании чем for loop.

Рома Пахтаев К примеру, тогда когда нужно пройти по всей глубине вложенностей массивов и объектов, просто если использовать for loop то получится, что нужно писать много таких вложенных петель друг в друга и если такие объекты будут меняться, то и вручную придется переписывать весь код вложенных петель причем для каждого такого объекта придется писать отдельный код, вот пример такого объекта на картинке
Рома Пахтаев в примере выше например если мы захотим подсчитать сумму всех зарплат по всем департаментам
Рома Пахтаев И рекурсия решает всё вот так
Спасибо еще раз за ваш ответ!
Наконец то полностью разобрался с вопросом

1 "стоит ли использовать рекурсию в целом?
Если да, то в каких случаях это будет оптимально?
В тех случаях, когда это будет оптимально!"
2 "Заранее благодарен за норм ответы =)"

Я игнорирую тексты людей, которые не в состоянии вместо картинки привести текст.
3 намек понятен?
Slava Savin
Slava Savin
50 253
Рома Пахтаев Я сюда не за намеками пришел, а за ответами на вопрос, свою язвительность можешь оставить при себе!!
Я тут че один кто не модаретор? куда всех дели то?
Я за цикл.
Но я не гуру программирования, которого надо слушать