Пример рекурсии в 1с #393320


#0 by Handlez
Хочется посмотреть на пример рекурсии на встроенном языке 1с, только какой-нибудь реально используемый.
#1 by vde69
#2 by ДенисЧ
А что не получается?
#3 by Classic
Рекурсия - зло:)
#4 by Mikeware
Обработка СтруктураПодчиненности, например
#5 by inka
А чем рекурсия на языке 1С отличается от бычной рекурсии?
#6 by ДенисЧ
Рекурсия - божестввенна (с)
#7 by Handlez
Нет просто интересно, а в типовых ее нет.
#8 by Fragster
а как же ?
#9 by Guk
Есть. Например в ТиС это обработка ДеревоДокументов...
#10 by DimG
В ПУБе тоже есть при расчете затрат
#11 by Handlez
ПОчему зло? Нет, ну в том смысле как это реализуется именно с использованием языка самого. Беру свои слова назад
#12 by Mikeware
ЕСли руки кривые, то и вызов оператор присваивания - зло...
#13 by vde69
в отчетах бывает, например для обработки неопределенного уровня результата запроса
#14 by Mikeware
А какая разница, на каком языке?
#15 by Mikeware
Ага, практически в любом типовом отчете... ПечатьСтроки вроде, рекурсивно вызывается...
#16 by Handlez
Спасибо, буду смотреть... А в каких случаях ее вообще стоит применять?
#17 by Classic
Ухты сколько любителей рекурсии. Агрессивных и пряморуких
#18 by Fragster
для обхода дерева
#19 by vde69
когда количестви итерраций ограничено разумными пределами, но заранее не извесно
#20 by Fragster
а вообще - для расчета факториала и числа фибоначчи, это в любом учебнике написано!
#21 by Handlez
Ясно спасибо!
#22 by DimG
именно как в Иначе при порядка 10 тыс вызовов 1ска свалится почти наверняка. Проходил.
#23 by vde69
а для зацикленого дерева? это самые распространенные грабли, по этому пользоваться нужно с осторожностью
#24 by ДенисЧ
Зацикленное дерево - это не дерево :-)
#25 by Fragster
а ты не цикли дерево :) у меня считается "задача про рюкзак" применительно к складским ячейкам через рекурсию
#26 by Mikeware
"куст - это совокупность веток и листьев, торчащих из одного места"©армия
#27 by Classic
Присоединяйся к клубу криворуких:)
#28 by vde69
например анализ стека выполнения макроса VB, вроде раскладываеться в дерево, ан далеко не всегда... у меня специальный анализаитор для подстановки шаблонов сделан, для определения зацикливания рекурсии.
#29 by Guk
+1 это граф...
#30 by DimG
Йа давно его президент
#31 by ДенисЧ
как ты стек вызовов умудрился зациклить? Или тебе тоже в клуб? :-))
#32 by 0xFFFFFF
Пипец в типовых нет. Ага. В каждом отчете.
#33 by Ёпрст
тссс... народ просто ни разу не видел ВывестиГруппировку :)
#34 by vde69
легко.... а в клубе я уже был - выгнали за криворукость :)
#35 by Злопчинский
решение задачи рюкзака - обсуждалосб здесь активно...
#36 by zak555
отчеты в Бюджетке 7-ке... например ОСВ по счету !!!
#37 by КонецЦикла
В ТиС вывод группировок почти в каждом отчете
#38 by Torquader
Рекурсия смертельна для тех, кто любит глобальные переменные использовать.
#39 by zak555
пример можно...
#40 by los_hooliganos
#41 by zak555
и где тут по-твоему рекурсия?
#42 by los_hooliganos
тфу ну вот тебе из ТиС:
#43 by FanatToNight
- только не горячись! спокойно!.. :)
#44 by zak555
просил пример для поста , т.е. глобальные переменными
#45 by Sserj
Видимо самое простое это получение полного наименование чего либо (со всеми вышестоящими группами).
#46 by ДенисЧ
ПолноеНаименование Синтаксис: ПолноеНаименование Назначение: Возвращает строку, содержащую полное наименование выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом /.
#47 by Я не курил
Для выборки с заранее неизвестным количество субконто используется часто
#48 by Sserj
Это элементарный пример, возможно будет нужен, если к примеру в именах групп встречаются знаки /, можно заменить на свой разделитель. Я подобное использовал при обмене - раскручивал иерархию справочников для сохранения всего дерева.
#49 by zak555
так а где пример рекурсии с глобальными переменными!
#50 by zak555
???
#51 by Злопчинский
по определению рекурсии - глобальные переменные там нафиг не нужны, они могут использоваться, но на сам факт выполнения рекурсии никоим образом не влияют...
#52 by mrkorn
если голбальные переменные использовать в внутри рекурсии и менять их... или еще  что-нибудь через них замутить... но это пример криворукой рекурсии
#53 by DemMif
#54 by 1Сергей
"Чтобы понять рекурсию, надо понять рекурсию" (С)
#55 by DemMif
Вот пример рекурсии. Не из типовой конфы.
#56 by zak555
1. это работать-то будет? 2. а зачем СтатусВозврата в непредопределенной процедуре?
#57 by zak555
вот пример рекурсии тоже из нетиповой:
#58 by Rie
Работать-то будет... Но за такую рекурсию отстреливать надо.
#59 by Rie
И такую рекурсию - тоже не стоит использовать.
#60 by DemMif
1.Обработка досталось по наследству и все работает))). 2.не знаю... Можно убрать, только лень корректировать.
#61 by DemMif
Автор никогда, слышишь, никогда не используй рекурсию!
#62 by Просто Лёха
Вот пример при переносе данных через OLE с текущей иерархией
#63 by DemMif
-->
#64 by Просто Лёха
что там работать не будет? Перенесли справочник с сотрудниками более 3000 чел, все как по маслу
#65 by Просто Лёха
Из 77
#66 by Просто Лёха
Со всей иерархией
#67 by lalex23
рекурсия - это красиво, как и слово так и код, но только если код красивый.
#68 by Rie
1. Много отвратительного кода - работает. От этого он не перестаёт быть отвратительным. Глупый совет. В использование рекурсии - весьма разумно. В использование рекурсии несколько противоестественно.
#69 by DemMif
Так, заинтриговали... Что можно изменить в процедуре .
#70 by zak555
почему?
#71 by zak555
самое красивое использование рекурсии в - не нужно использовать 5 вложенных циклов!
#72 by Rie
В используется так называемая "хвостовая рекурсия" - то есть, рекурсивный вызов является последним исполняемым оператором рекурсивной процедуры. Рекурсивная процедура с хвостовой рекурсией: Процедура Рек(Знач Х) Процедура Нерек(Знач Х) При этом Нерек потребляет меньше памяти, работает быстрее, а выглядит ничуть не сложнее, чем Рек. Хорошие оптимизирующие компиляторы отлавливают случаи хвостовой рекурсии и сами преобразуют их в циклы. 1С не является (в данном вопросе) хорошим оптимизирующим компилятором. В рекурсия является "хвостовой" - то есть, является _более туманным_ (с точки зрения чтения) и _медленнее работающим_ эквивалентом цикла.
#73 by Rie
Факториал - другой (по сравнению с ) вид рекурсии, преобразуемый в цикл. _В 1С_ использование цикла _для таких случаев_ - проще и эффективнее (подчёркнутое - существенно). Недавно на этом форуме всплывал дурацкий пример с числами Фибоначчи, где _неправильное_ использование рекурсии повышало время вычислений с N до N*N.
#74 by DemMif
А как в таком случае добиться, чтобы пользователь, к примеру ввел 9 знаков, а не меньше?
#75 by Rie
Пока ВвестиСтроку(Сумма,"Введите БИК",9,0,0)=1 Цикл
#76 by zak555
ну так получается использование допускается... правда не для больших чисел!
#77 by DemMif
Можно и так, только на скорость не влияет)))
#78 by zak555
влияет на использование оперативной памяти!
#79 by Rie
Влияет. И на скорость, и на объём занимаемой памяти. Помедитируй над тем, что происходит при рекурсивном вызове, а что происходит при переходе к следующему шагу цикла.
#80 by victuan1
Очень часто приходится мне на практике пользоваться рекурсией: перенос данных между конфами, разузлование спецификаций в производстве и пр. Примеры те же, что и для паскаля.
#81 by DemMif
Найду человека, который быстро набивает текст и посмотрю...
#82 by Rie
Я не спорю, что будет. И я "за" рекурсию. Двумя руками. Но - применение рекурсии, как и любого другого средства, далеко не всегда целесообразно.
#83 by Rie
Любой человек набивает текст слишком медленно. Сгенерируй _большой_ файл, замени ВвестиСтроку на чтение из файла - и замерь время.
#84 by DemMif
Вот на чтения из файла я никогда не буду пользоваться рекурсией.
#85 by zak555
чего его искать... можно итак понять - если использовать и постояно делать "ошибкци", т.е. вызывать рекурсию, то стек вызова будет с каждым разом увеличиваться !!! а вот - не будет!
#86 by Rie
А чем отличается ввод с клавиатуры от чтения из файла?
#87 by zak555
я думаю, что её использование должно быть в умелых руках!
#88 by DemMif
Понятно объяснил... Спорить не буду... Но все же пользователю достаточно ошибится три раза. Не думаю, что пользователь ошибется 100 раз и более.
#89 by DemMif
Смотря для чего...
#90 by zak555
- dblbvj yt dbltk ytjdys[ gjkmpjdfntktq!
#91 by Rie
В данном случае - разницы нет.
#92 by zak555
- видимо не видел нервных полльзователей
#93 by DemMif
Ладно, всем спасибо! Сегодня я стал умнее чуть-чуть...
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С