|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
nurekilAvA-N, по непонятным мне причинам условие выхода из цикла q:i="" не выполняется, поменял его на q:i=" " результат тот же пробовал вводить различные начальные точки i - вывод работает Это неправда. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2013, 20:14 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
krvsaРекурсия - фигня! Ой вэй, рекурсия - божественна. Но тут, действительно, лучше использовать $query ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2013, 21:14 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
не рубящий в кашеОй вэй, рекурсия - божественна. Фигасе! Рекурсия это лишь простое решение того, что не можешь (не умеешь, ленишься) разложить на конечное число циклов... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 09:04 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Рекурсия хороша, Когда неглубока, А когда глубока, Падает от обморока. ДокументацияIn rare cases, this recursion can rise to several thousand levels, threatening stack overflow and a process crash. However, recursion can lead to stack overflow. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 09:38 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
servit, не думаю, что у krvsa, который пытается разложить на конечное число циклов будет переполнение стека. Вот такая программа у меня дошла до 1304 шага: Код: sql 1. 2. 3. 4. 5.
krvsa, попробуй без рекурсии с конечным числом циклов пройтись по всем файлам и директориям на диске. Я вот, не могу, не умею и ленюсь делать это без рекурсии. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 13:08 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
не рубящий в кашеkrvsa, попробуй без рекурсии с конечным числом циклов пройтись по всем файлам и директориям на диске. Я такое уже делал. Как раз для иллюстрации самому себе. Т.к. сам когда-то столкнулся с утверждением, что любую рекурсию можно разложить на конечное число циклов. Причем скорость обработки после "раскладки" (например на JavaScript) возрастает значительно! не рубящий в кашеЯ вот, не могу, не умею и ленюсь делать это без рекурсии. Это твои проблемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 15:00 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
не рубящий в кашене думаю, что у krvsa, который пытается разложить на конечное число циклов будет переполнение стека. Нет конечно... Потому как количество циклов будет явно меньше десятка... Пока хватало 5-6... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 15:01 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
krvsaТ.к. сам когда-то столкнулся с утверждением, что любую рекурсию можно разложить на конечное число циклов. Если точнее, то любую хвостовую рекурсию можно заменить на итерацию (цикл). Так что сначала преобразуем рекурсию в хвостовую, и если получилось - в итерацию. Приходилось делать такое на COS, т.к. рекурсивное программирование на нём - штука потенциально ненадёжная из-за относительно небольшой глубины стека. Если даже сегодня программа "вписывается" в стек, то завтра либо постановка немного поменяется, либо вызовы пойдут с большей глубины стека - и привет, <FRAMESTACK>. К тому же ускорение от перехода на итерацию обычно довольно значительное. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 15:44 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Если использовать необходимое количество накопителей с замещением, то любую рекурсию можно заменить на итерации. Каждая итерация просто 1) замещает принятый на обработку элемент набором если требуется рекурсия или 2) выносит его из накопителя если обработка выполнена полностью. Верхний уровень просто повторяет итерации если в накопителях что-то есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 16:00 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
ну яЕсли использовать необходимое количество накопителей с замещением...То есть, фактически вы предлагаете моделировать стек на локальной памяти процесса? Это, конечно, решит проблему потенциального <FRAMESTACK>, едва ли даст ускорение по сравнению с "классической" рекурсией. Фишка хвостовой рекурсии в том, что рекурсивный вызов - последнее действие функции, поэтому её локальная среда повторно никогда не используется. Поэтому локальную среду не надо восстанавливать, а отсюда - совсем небольшой шаг до превращения рекурсии в итерацию. Неплохая подборка примеров таких превращений. Ещё где-то попалось, что компиляторы некоторых ЯП автоматически распознают хвостовую рекурсию и компилируют её в итерацию. До чего дошёл прогресс... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 16:51 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
krvsaЯ такое уже делал. Вот прям по любой файловой структуре, не зная глубину вложенности директорий? ну яЕсли использовать необходимое количество накопителей с замещением, то любую рекурсию можно заменить на итерации. Так любая рекурсия и превращается при компиляции в итерацию с использованием стека, где хранятся локальные окружения. Alexey MaslovЕщё где-то попалось, что компиляторы некоторых ЯП автоматически распознают хвостовую рекурсию и компилируют её в итерацию. До чего дошёл прогресс... В основном в функциональных языках, вроде Haskell'a. А если говорить о чистых функциональных языках, то там даже циклов нет в принципе. И, хочу заметить, отнюдь не любую рекурсивную функцию можно превратить в хвостовую с аккумулятором. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 17:55 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
не рубящий в кашеИ, хочу заметить, отнюдь не любую рекурсивную функцию можно превратить в хвостовую с аккумулятором.Вообще-то теория гласит другое:С. М. Дудаков. "Математическое введение в информатику"Теорема 6.3. (Об удалении рекурсии) По каждому алгоритму можно построить эквивалентный алгоритм без рекурсии.Но, возможно, вам удастся её опровергнуть. Дерзайте! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 18:54 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Alexey Maslov, я писал про "хвостовую (рекурсию, прим.) с аккумулятором", а вы мне про "эквивалентный алгоритм без рекурсии". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 19:01 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Я лишь изложил один из подходов к преобразованию рекурсии в итерацию, который приходилось применять лично. Хвостовая рекурсия - не самоцель, а лишь промежуточный шаг. Но теорема, оказывается, более сильная, в ее формулировке нет ни слова о хвостовой рекурсии. Может быть, она в общем случае и не нужна; на анализ доказательства времени сейчас нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 19:08 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Alexey MaslovЯ лишь изложил один из подходов к преобразованию рекурсии в итерацию Да, рекурсия становится всегда итеративной при компиляции. Для этого компилятором(интерпретатором) добавляется стек вызовов. А вот если говорить о преобразовании рекурсии во что-то итерационное в коде программиста, мне становится страшно. Или использование n-уровней циклов, когда уровней неких данных > n. Ведь в первом случае никто не поймёт, что автор имел в виду. А во втором просто будет коллапс. Мы же говорим о построении продакшен(извините за столь противное слово)-систем, где рекурсия помогает сберечь нервы людей сопровождающих код. Alexey MaslovХвостовая рекурсия - не самоцель, а лишь промежуточный шаг. Но теорема, оказывается, более сильная, в ее формулировке нет ни слова о хвостовой рекурсии. И не будет, ведь хвостовая рекурсия - частный случай обычной рекурсии. Иногда можно привести рекурсию к хвостовой (факториал, фиобоначчи, например), иногда нельзя: сопоставление с образцом и вызов в зависимоти от этого разных функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 23:12 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Alexey MaslovЕсли точнее, то любую хвостовую рекурсию можно заменить на итерацию (цикл). Можно спорить долго... Применять термины... Но фраза была только со словами "ркурсию" и "любую". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:29 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
ну яЕсли использовать необходимое количество накопителей с замещением, то любую рекурсию можно заменить на итерации. Каждая итерация просто 1) замещает принятый на обработку элемент набором если требуется рекурсия или 2) выносит его из накопителя если обработка выполнена полностью. Верхний уровень просто повторяет итерации если в накопителях что-то есть. Да, именно такой прием и применял, когда проверял то утверждение... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:30 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Alexey Maslovедва ли даст ускорение по сравнению с "классической" рекурсией А вот это все уже нужно проверять. Например яваскриптеры четко утверждали об обратном! Ускорение было (ради него и делали) и значительное (это их слово)... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:32 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
не рубящий в кашеВот прям по любой файловой структуре, не зная глубину вложенности директорий? Глубина вложенности при "развороте" рекурсии в циклы не имеет никакой роли, т.к. количество циклов конечно и оно не велико... С "любой файловой структурой" я дело не имел, т.ч. утверждать не буду. Но если говорить о Кащее - так там одни функции на все про все, т.ч. разницы в этом не вижу... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:36 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Alexey Maslovна анализ доказательства времени сейчас нет. Да и смысла особого нет. Для меня было достаточным знать про это. И при желании тепрь я могу смело этим знанием воспользоваться! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:39 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
не рубящий в кашеДа, рекурсия становится всегда итеративной при компиляции. Для этого компилятором(интерпретатором) добавляется стек вызовов. Алилуия!!! Т.е. сам факт этого ты уже признал... не рубящий в кашеА вот если говорить о преобразовании рекурсии во что-то итерационное в коде программиста, мне становится страшно. Или использование n-уровней циклов, когда уровней неких данных > n. Ведь в первом случае никто не поймёт, что автор имел в виду. А во втором просто будет коллапс. Страшно - не делай. И про понимание все очень относительно... Например я не требую от конечных программеров понимания наших "системных" процедур и функций, достаточно уметь их применять. не рубящий в кашеМы же говорим о построении продакшен(извините за столь противное слово)-систем, где рекурсия помогает сберечь нервы людей сопровождающих код. Тот продакшен только выиграет если обработка чего-либо по времени уменьшится. Например совсем недавно была разработана процедура позволяющая обрабатывать некий "стек процедур/функций" многоджобово, в зависимости от настроек пользователя. Программинг для конечного программиста усложнился значительно. Но сам процесс обработки вырос в разы на многопроцессорных процессорных и многоядерных компах. А в ЦОДах выростет и подавно. Т.ч. получается, что игра стоит свеч! А применительно к тебе - тебе и решать. Я так для себя это уже решил... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:47 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
krvsaне рубящий в кашеДа, рекурсия становится всегда итеративной при компиляции. Для этого компилятором(интерпретатором) добавляется стек вызовов. Алилуия!!! Т.е. сам факт этого ты уже признал... Эм, а где я это отрицал? Только вот этим занимается компилятор, а не бедняги-программисты. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 16:41 |
|
помогите начинающему с глобалами
|
|||
---|---|---|---|
#18+
Сталкивался с проблемой, что открытый курсор является видимым на разных уровнях рекурсии. И приходится либо работать по принципу "открыл курсор - обработал и сохранил данные - закрыл курсор - рекурсивно исходя из собранных данных выполнил функцию", либо изолировать курсор объявляя new системным переменным, что кажется мне не очень надежным способом. Кстати, посмотрел бы, сколько придется попрыгать при развертывании дерева, хранящегося в реляционной таблице для отображения в графическом виде не использую рекурсию. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 17:02 |
|
|
start [/forum/topic.php?fid=39&gotonew=1&tid=1557162]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
8ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 238ms |
total: | 506ms |
0 / 0 |