Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Рекурсия (https://javascript.ru/forum/misc/1970-rekursiya.html)

arseniy-at-home 13.10.2008 10:01

Рекурсия
 
Здравствуйте.

Я использую рекурсивную функцию и в некоторых случаяю получаю Out of memory. Возможно ли как-то увеличить объем выделяемой памяти?

Octane 13.10.2008 10:18

Не надо ничего увеличивать, у Вас просто бесконечная рекурсия получается или слишком большой объем вычислений.

arseniy-at-home 13.10.2008 10:23

Цитата:

Сообщение от Octane (Сообщение 7010)
Не надо ничего увеличивать, у Вас просто бесконечная рекурсия получается или слишком большой объем вычислений.

Это понятно. Но задача такова, что никак иначе не поступить. Поэтому нужно что-то придумать.

arseniy-at-home 13.10.2008 10:25

Цитата:

Сообщение от Octane (Сообщение 7010)
Не надо ничего увеличивать, у Вас просто бесконечная рекурсия получается или слишком большой объем вычислений.

В смысле большой объем вычислений у меня. Точно, не бесконечная.

Octane 13.10.2008 11:01

Значит эту задачу нужно решать не на стороне клиента или возможно найти более оптимальный способ решения, который не потребует столько ресурсов и времени.

ZoNT 13.10.2008 11:16

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

Snipe 13.10.2008 12:33

Разбейте и выполняйте маленькими кусочками по сетИнтервал.

magistr_bender 13.10.2008 20:34

Цитата:

Сообщение от ZoNT
любую рекурсию можно заменить циклом...

хм.. интересно а как ты замениш генерацию дерева из базы на цикл, с учётом что древо будет динамически изменяться и вложений будет теоретически до бесконечности..
представ себе у меня такая задача возникала.. интересно бы увидить её реализацию циклами..
p.s. рекурсией это 5 строчек у меня вышло
p.s.s. могу привести ещё много подобных задач с рекурсией

ZoNT 13.10.2008 20:40

подучи теорию и алгоритмизацию...

magistr_bender 13.10.2008 20:48

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

ZoNT 13.10.2008 21:46

я и не говорил, что он будет обязательно быстрее и короче :)
Как раз по причине короткой записи и используют рекурсию. Что ведёт к неочевидным проблемам в дальнейшем (с чем и столкнулся топикстартер).

magistr_bender 13.10.2008 22:27

неплохо бы чтоб ТС выложил код тогда посмотрели бы что можно с ним сделать

Gvozd 14.10.2008 00:55

не все понимают рекурсию...
но еще меньшее количество людей, из тех кто ее понимает, знает как обойтись без нее.
с аппаратной точки зрения при использовании рекурсии всегда тратится лишняя память для локальных переменных, и зачастую лишнее процессорное время(речь идет о компилируемых языках. при интерпретируемых, берем на поправку на работу интерпретатора).
Цитата:

Сообщение от magistr_bender
хм.. интересно а как ты замениш генерацию дерева из базы на цикл, с учётом что древо будет динамически изменяться и вложений будет теоретически до бесконечности..

я видел решения , при которых, организация дерева не ребует рекурсии. возмождно я что-то путаю, но алгоритм "Nested Sets" работает без рекурсии. хотя помимо него есть тоже разные пути реализации.
аналогично для любой другой "классической рекурсивной" задачи.
минус нерекурсивного подхода в таких задачах, не в "медленной" работе (при больших объемах данных, и уровнях вложенности нерекурсия начинает выигрывать), а в том, что более сложно написать, отладить, проверить на потенциальные баги, и ОБЪЯСНИТЬ другому нерекурсивное решение. Но если оно у вас работает, и работает правильно, то это просто отлично
ЗЫ
Цитата:

Сообщение от magistr_bender
неплохо бы чтоб ТС выложил код тогда посмотрели бы что можно с ним сделать

+1

michael 07.11.2008 18:36

проблема
 
как можно организовать по событию onmouseover(для картинки) смену картинки на другую бесконечное количество раз(каждый раз новая картинка), а при обратном событии оставить последнюю картинку?

Gvozd 07.11.2008 21:23

на omouseover ставим смену картинки на новую.
на обратное событие ничего не ставим.
ЗЫ какой вопрос такой и ответ

michael 07.11.2008 21:26

Цитата:

Сообщение от Gvozd (Сообщение 8200)
на omouseover ставим смену картинки на новую.
на обратное событие ничего не ставим.
ЗЫ какой вопрос такой и ответ

а это не для двух картинок? потому что мне нужно для 8

Gvozd 07.11.2008 23:18

нет. это не для двух, а ИМЕННО для восьми
более того это единственно верное решение для восьми картинок.
если кто-то вам скажет, что для восьми картинок решается по другому, не верьте ему и киньте в него ботинком


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