07.07.2014, 20:54
|
Новичок на форуме
|
|
Регистрация: 07.07.2014
Сообщений: 1
|
|
Цикл или рекурсия
Из текста учебника я понял, что код с использованием цикла эффективнее по сравнению с рекурсией. Но...
Я нашел в интернете функцию, которая из введенного в текстовое поле списка строк удаляет дубликаты. Мне нужна более специфическая задача, но очень похожая, и я решил взять за основу интернетный прототип. Он был реализован в виде рекурсии. Я сделал с циклом и он работает в разы быстрее, но меня терзают смутные сомнения. Ведь почему-то изначально программист (видимо более опытный чем я) сделал с рекурсией...
|
|
07.07.2014, 21:09
|
Профессор
|
|
Регистрация: 17.05.2014
Сообщений: 197
|
|
Не парься. Любой рекурсивный алгоритм выразим итеративно. В языках без оптимизации хвостовой рекурсии (ЕМНИП, js к таковым относиться), рекурсия -- это жопа. Она память жрет, производительность падает. Не нужно рекурсивно ничего пейсать. Некоторые хомячки пишут рекурсивно, просто ради позерства, чтобы показать всему миру своим друзьям "в контакте", что они пишут в фапе-стайле.
Нутыпонел.
|
|
07.07.2014, 21:22
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
ЕМНИП, js к таковым относиться
|
Все современные VM JS уже неплохо оптимизируют рекурсии (разумеется лишь частные случаи). Древней книжки Крокфорда начитался? Прежде чем включать умника нужно подумать (а лучше вообще не включать).
Цитата:
|
рекурсивно, просто ради позерства
|
Рекурсия - простое, очевидно и элегантное решение. Разумеется всё нужно юзать с умом.
Последний раз редактировалось kobezzza, 07.07.2014 в 23:32.
|
|
07.07.2014, 21:27
|
Профессор
|
|
Регистрация: 17.05.2014
Сообщений: 197
|
|
Сообщение от kobezzza
|
Все современные VM уже оптимизируют неплохо хвостовые рекурсии
|
Даже если так, надо еще писать в хвосто-рекурсивном стиле, а это гребаный адЪ. И даже с оптимизацией она сольет итерации.
Сообщение от kobezzza
|
Рекурсия простое, очевидно и элегантное решение.
|
Это очередной базворд. Приведи пример где это справедливо. Я чет не видел такого, если не считать задроченного до дыр факториала, да и то вопрос.
|
|
07.07.2014, 21:29
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от foo
|
Это очередной базворд. Приведи пример где это справедливо. Я чет не видел такого, если не считать задроченного до дыр факториала, да и то вопрос.
|
Любой поиск в глубину, например удаление непустой папки. Только полный кретин будет "оптимизировать" это место переписывая 3 строчки рекурсия на 30 с циклом и искусственным стеком.
|
|
07.07.2014, 21:32
|
Профессор
|
|
Регистрация: 17.05.2014
Сообщений: 197
|
|
Сообщение от kobezzza
|
(разумеется
|
И кстати, почему разумеется?
|
|
07.07.2014, 21:33
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
Даже если так, надо еще писать в хвосто-рекурсивном стиле, а это гребаный адЪ.
|
Писать надо так, чтобы работать с этим нормально было, а оптимизации оставь для компиляторов и специальных библиотек.
|
|
07.07.2014, 21:33
|
Профессор
|
|
Регистрация: 17.05.2014
Сообщений: 197
|
|
Сообщение от kobezzza
|
3 строчки рекурсия на 30
|
Покажи пример. Нет такого даже близко.
|
|
07.07.2014, 21:38
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от foo
|
Покажи пример. Нет такого даже близко.
|
Напиши паттерн "примесь" на рекурсии и без. Я писал оба варианта. Вариант на циклах больше раза в 2 и супер не очевидный.
Без рекурсии: https://github.com/kobezzza/Collecti...e/obj.jsn#L118
изучай.
***
Сколько лет ты пишешь код? 0.1? оно и видно, но зато в каждом треде всех учишь и рассказываешь сказки.
|
|
07.07.2014, 21:38
|
Профессор
|
|
Регистрация: 17.05.2014
Сообщений: 197
|
|
Сообщение от kobezzza
|
Писать надо так, чтобы работать с этим нормально было, а оптимизации оставь для компиляторов и специальных библиотек.
|
kobezzza,
Ты уверен, что ты понимаешь о чем говоришь?
Код:
|
fact=function(n){if(n<2) return 1; return n*(fact(n-1))} |
Это не хвосто-рекурсивный код. его соптимизировать невозможно.
|
|
|
|