Страницы: 1
RSS
Рекурсия на метках, Как повторить смысл/функционал рекурсивной процедуры/функции метками
 
Доброго времени суток, Планетяне!

Есть подозрение, что метки могут заменить рекурсию, ускорив процесс, но не хватает "шестерёнок" в голове — прошу подсобить, создав функцию FILE_Array1xSortInd2 на метках (потуги прикрепил) по образу и подобию рекурсивной  FILE_Array1xSortInd

Сортер взял отсюда, тестирую на 601 100 строк вот этих данных.
КОДЫ
Изменено: Jack Famous - 28.05.2019 15:01:21
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Есть подозрение, что метки могут заменить рекурсию, ускорив процесс
На чем базируется? В рекурсии вроде все делается по условию, а тут по тому же условию будем бегать по меткам, в чем фишка?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim: На чем базируется?
фактически ни на чём :)
разве что замечал, что метки очень шустрые и иногда их юзаю для перехода внутри вложенных циклов и это работает… Сможете подсобить?)
Изменено: Jack Famous - 28.05.2019 15:43:30
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
За редкими исключениями, основное назначение меток и операторов перехода в любом языке программирования - резко ухудшить надежность и читабельность кода...
Владимир
 
sokol92, знаю-знаю-знаю - очень много раз это слышал. Вопрос в 1ую очередь о самой возможности (как это будет выглядеть).

P.S.: сколько раз слышал про ужасы использования меток, но не видел на практике в коде (крайне неудачного применения) ни разу  :D  Часто видел, что их можно заменить, но никакого "криминала" - я использую частенько и всё ОК…
Цитата
sokol92: основное назначение
вы же не думаете, что возможность их использования - от лукавого?)))
Изменено: Jack Famous - 28.05.2019 17:33:59
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
возможность их использования - от лукавого?
Атавизмы от первых языков программирования.
Владимир
 
Цитата
sokol92 написал:
основное назначение меток и операторов перехода в любом языке программирования
это возможность резко перейти (перескочить) на выполнение кода с указанной метки
наличие меток в коде никак не ухудшает  его надежности, ровно так же как их отсутствие не является гарантией надежности кода
Цитата
Jack Famous написал:
Рекурсия на метках
пишите рекурсию на рекурсии - это упростит и задачу и понимание кода
а использовать метки или нет - это исключительно дело вкуса.
я не вспомню когда использовал метку в моем коде в последний раз, может 10 лет назад,может 15 или 20. я предпочитаю написать дополнительную процедуру и в нужных местах поставить Exit Sub чтобы не использовать переходы на метки
возвращаясь к первой мысли - это не сделало написанное мною хоть сколько-нибудь надежнее))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, согласен по поводу меток. По ссылке в #5 я демонстрировал удобство (НЕ незаменимость, а именно удобство) их использования в некоторых случаях. По коду поможете? В смысле это вообще возможно?
Изменено: Jack Famous - 28.05.2019 18:27:24
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Зачем? Если переходить по метке выше исполняемой строки -  та же ресурсия, но хуже организованная
 
vikttur, я понимаю, что это как раз неправильное и совершенно ненужное использование меток. Просто не могу догнать, как это сделать… Чисто в рамках эксперимента)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Может я ошибаюсь, но привык к образному мышлению.
Рекурсия представляет собой самовложенный цикл с ограничением глубины вложенности. Т.е. с каждым переходом контекст операций становится все "глубже", при достижении ограничения конечный итог разворачивается в обратном направлении, "собирая результат" с каждого "уровня".
Переход по меткам осуществляется на одном уровне вложенности, либо на уровень(уровни) выше. Чтобы того же эффекта, что и при рекурсии, необходим просчет переменных при определенных условиях, описание которых будет более заморочным и ресурсозатратным, чем использование рекурсии.
 
Доброе время суток.
Цитата
Tuvash написал:
необходим просчет переменных при определенных условиях, описание которых будет более заморочным и ресурсозатратным, чем использование рекурсии.
Ну, на счёт ресурсоёмкости я бы так не сказал. В силу того, что Quick Sort естественно рекурсивный (то есть при каноническом виде с рекурсией компилятор за вас организовывает стек и организует код для сохранения состояния переменных и аргументов функции между вызовами) . Для не рекурсивного варината нужно всего лишь нужно организовать стек для хранения индексов текущего диапазона сортировки. На этом и получить выигрыш по памяти, так как в стек не будут помещаться не нужные там локальные переменные. Плюс некоторый выигрыш по быстродействию - исключается вызов метода на каждом этапе - это тоже имеет накладные расходы. Но писать в таком стиле - да, несколько сложнее.
Хе, хе. Если бы Алексей не переименовал алгоритм и помнил бы откуда ноги растут, то давно бы нашёл не рекурсивную версию :)
Изменено: Андрей VG - 28.05.2019 23:08:57
 
Цитата
vikttur написал:
Если переходить по метке выше исполняемой строки -  та же ресурсия,
- а вот тут уже я не согласен ибо рекурсия - процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя. Переход по метке - это уже просто цикл.
По вопросам из тем форума, личку не читаю.
 
Да, не так выразился. Писал о похожести. При рекурсии процедура вызывает сама себя. При метке сверху получаем цикл, да. Но почему рекурсия - не цикл ( в общем понятии)?
 
Цитата
vikttur написал:
Но почему рекурсия - не цикл ( в общем понятии)?
ПО тому что вызова процедуры из самой себя не происходить.  Тут скорее обратная связь в усилителе больше на рекурсию похожа. Но в целом - условности все это.
По вопросам из тем форума, личку не читаю.
 
Андрей VG, приветствую и вас  :)
Цитата
Андрей VG: на счёт ресурсоёмкости я бы так не сказал
вот мне тоже интересно сравнить "в лоб", но пока никто с этими стэками помочь не хочет))
Цитата
Андрей VG: Если бы Алексей не переименовал алгоритм и помнил бы откуда ноги растут
не переименовывал особо, т.к. это версия от Anchoret и не забыл, т.к. ему же ссылки на этот пост давал))) проведу тестирование на моих данных  ;)
Изменено: Jack Famous - 29.05.2019 09:29:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх