|
Подскажите по рекурсивной функции | ☑ | ||
---|---|---|---|---|
0
егаис
16.05.22
✎
09:29
|
&НаСервере
Функция ВернутьДни(Знач ВыбПодразделение) Если ВыбПодразделение.Родитель.Пустая() Тогда Возврат ВыбПодразделение.Тест; Иначе Если ВыбПодразделение.Тест = 0 Тогда ВернутьДни(ВыбПодразделение.Родитель); Иначе Возврат ВыбПодразделение.Тест; //значение КонецЕсли; КонецЕсли; КонецФункции &НаКлиенте Процедура Команда1(Команда) ВернутьДни(Подразделение); КонецПроцедуры Каким образом выскочить из рекурсии, если условие сработало на некоторой итерации? Значение здесь получаем Возврат ВыбПодразделение.Тест; //значение но дальше возврат на предыдущий шаг, возвращает хрень. |
|||
1
егаис
16.05.22
✎
09:32
|
вешать какую-то переменную, типа ЗначениеВыбрано = Истина?
|
|||
2
Chai Nic
16.05.22
✎
09:32
|
А опиши суть задачи. По предоставленному фрагменту ничего понять невозможно.
|
|||
3
егаис
16.05.22
✎
09:33
|
(2) справочник подразделений в ЗУП. Есть числовое поле. Если оно заполнено у элемента, возвращаем его, если нет - у родителя
|
|||
4
RomanYS
16.05.22
✎
09:34
|
(0) по сути вопроса выглядит нормально
&НаСервереБезКонтекста здесь напрашивается, но вопрос конечно не решит |
|||
5
Chai Nic
16.05.22
✎
09:35
|
(3) "Если оно заполнено у элемента, возвращаем его, если нет - у родителя"
И где здесь применение рекурсии? Подъем "снизу вверх" - чистейшая итерация. |
|||
6
егаис
16.05.22
✎
09:36
|
(5) иерархия может быть большой, предлагаешь все время на пустого родителя проверять?
|
|||
7
Chai Nic
16.05.22
✎
09:38
|
(6) Как вам здесь рекурсия поможет? Если хотите оптимизацию при повторных вызовах - используйте кэширование.
|
|||
8
Irbis
16.05.22
✎
09:38
|
(6) А уровень элемента запросить религия не позволяет?
|
|||
9
егаис
16.05.22
✎
09:39
|
(8) рассматриваю и такой вариант, в цикле по уровню можно проверить
Почему рекурсия-то не подходит? |
|||
10
Irbis
16.05.22
✎
09:40
|
(9) Потому что тупая трата машинных ресурсов. Вместо иттерационного цикла с прерыванием в нужном месте.
|
|||
11
егаис
16.05.22
✎
09:41
|
(10) уговорил, перепишем функцию )
|
|||
12
Многолетний Апельсин
16.05.22
✎
09:43
|
Вместо
ВернутьДни(ВыбПодразделение.Родитель); Написать Возврат ВернутьДни(ВыбПодразделение.Родитель); |
|||
13
егаис
16.05.22
✎
09:46
|
(12) бинго! Спасибо!
|
|||
14
Chai Nic
16.05.22
✎
09:51
|
Ещё и не так бывает, когда функции называть как процедуры.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |