Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как рекурсию заменить максимально быстрым циклом (https://javascript.ru/forum/offtopic/34833-kak-rekursiyu-zamenit-maksimalno-bystrym-ciklom.html)

ksa 21.01.2013 15:57

kobezzza, еще раз повторюсь... Если задачка раскладывается на конечное число циклов и этого хватает для решения проблемы в общем виде - это не "рекурсивная задачка".
Если её кто-то решеет рекурсивно - это его проблема и ответственность. :D

kobezzza 21.01.2013 16:03

Цитата:

Т.е. есть корень диска... Там есть как файлы, так и папки... В каждой папке могут быть как файлы так и папки.
Сделай это без рекурсии, только циклами.
Сделано выше, вместо папок и файлов объекты, а всё остальное тоже самое.

Цитата:

Сообщение от ksa (Сообщение 228538)
kobezzza, еще раз повторюсь... Если задачка раскладывается на конечное число циклов и этого хватает для решения проблемы в общем виде - это не "рекурсивная задачка".
Если её кто-то решеет рекурсивно - это его проблема и ответственность. :D

Лол, я не знаю какая глубина у входящих объектов и сколько их, и даже, что это за объекты (массивы или простые хеши), но я как то делаю поиск в глубину и сравнение. Почитай что делает движок JS когда вызывает функцию и тогда наверно поймёшь что же такое рекурсия и как она работает и главное: как её описать.

http://ru.wikipedia.org/wiki/%D0%A0%...81%D0%B8%D1%8F
Цитата:

Любую рекурсивную функцию можно заменить циклом и стеком.

Gozar 21.01.2013 16:03

ksa,
Какой ты упрямый, прям как я :). Я часто пишу сначала на рекурсии, а затем переписываю на циклы, т.к.
Цитата:

Сообщение от kobezzza
работает значительно шустрее



Цитата:

Сообщение от ksa
напиши мне цикличный алгоритм подсчета количества файлов в папках.

Так и начинается любой холивар. Я не умею это делать, но утверждаю, что это невозможно. ;)

kobezzza 21.01.2013 16:08

Цитата:

Сообщение от Gozar (Сообщение 228540)
Так и начинается любой холивар. Я не умею это делать, но утверждаю, что это невозможно. ;)

Вот-вот:)

nerv_ 21.01.2013 16:10

Цитата:

Сообщение от Дзен-трансгуманист
megaupload,
Приятного аппетита.

+

kobezzza, если все "так просто", почему движок не делает это за нас?

kobezzza 21.01.2013 16:12

Цитата:

Сообщение от nerv_ (Сообщение 228543)
+

kobezzza, если все "так просто", почему движок не делает это за нас?

Многие компиляторы умеют это делать, но движки JS пока не научились, т.к. думаю у них пока не доделаны более узкие места и просто вопрос времени.

И ещё как мне кажется проблема в том, что такую оптимизацию легко делать в функциональных языках, т.к. функция никак не может влиять на внешний контекст, а JS как известно процедурный и внутри функции могут спокойно переопределяться внешние и глобальные переменные, одним словом вызов функции с одинаковыми параметрами не гарантирует одинаковый результат, поэтому JIT компилятору JS трудно сделать универсальную замену (от сюда кстати также растут проблемы с инлайнингом функции).

ksa 21.01.2013 16:23

Цитата:

Сообщение от kobezzza
Сделано выше, вместо папок и файлов объекты, а всё остальное тоже самое.

Вынужден согласиться... :D
Сам так же уже придумал как с папками разобраться в один цикл, но с 2-мя табличками...

Цитата:

Сообщение от Gozar
Какой ты упрямый, прям как я

Что есть - то есть. :D

Просто в моём случае все делается с базами данных и там я не получу никакого ускорения с другим подходом... Т.к. меня начнут тормозить операции с данными в таблицах. Поскольку одной оперативной памятью там не обойдешся...
От этого и "плясал".

Цитата:

Сообщение от Gozar
Я не умею это делать, но утверждаю, что это невозможно.

Наверно таки не "утверждал"... Более хотел разобраться. :D Поскольку интерес был устойчивым.
И естественно много приобрёл благодаря вам. :thanks: Поскольку просто с задачками "из опереативной памяти" дело имел мало...

megaupload 21.01.2013 16:35

Все идет по плану; Нубы вновь схлеснулись с отцами в поисках установления истины любую ли рекурсию можно заменить циклом?

Ответ конечно очевиден - любую, ибо вызов функций javascript это и есть цикл выполнения синтаксического дерева; Но нубы то этого не знают; Ееееекселент;

Цитата:

Сообщение от Дзен-трансгуманист
Приятного аппетита.

спасибо)

ksa,
ой кому-то припекло))

kobezzza,
красава) все верно описал)

megaupload 21.01.2013 16:41

Пасоны, напишИте регулярку для разворачивания рекурсии в цикл)

ksa 21.01.2013 16:53

Цитата:

Сообщение от megaupload
ой кому-то припекло))

В каком смысле? :blink:
Диспут или обсуждение какой-либо проблемы - обычное дело.


Часовой пояс GMT +3, время: 21:24.