Можно ли прервать рекурсивный вызов?
-
- assistant
- Сообщения: 113
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 3 раза
- Контактная информация:
Можно ли прервать рекурсивный вызов?
Есть рекурсивная VI, которая при правильных входных параметрах имеет максимум 5 глубину вложенности, при определённых неправильных - бесконечную. Можно ли на условно 6-7-ой итерации прервать выполнение и выдать ошибку и/или число? Спасибо.
-
- doctor
- Сообщения: 2210
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 26 раз
Re: Можно ли прервать рекурсивный вызов?
Средствами среды - нет. Но можно номер итерации передавать как параметр и внутри vi контролировать это число. При вызове, соответственно, номер итерации увеличивать.
-
- professor
- Сообщения: 3394
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Можно ли прервать рекурсивный вызов?
Извратиться можно, но нужно ли?
Не проще ли проверить входные параметры на допустимость?
Не проще ли проверить входные параметры на допустимость?
- Вложения
-
- rec.vi
- (9.85 КБ) 69 скачиваний
-
- assistant
- Сообщения: 113
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Можно ли прервать рекурсивный вызов?
Тоже думал об этом, попробуем.
Они сами по себе будут допустимыми, но один заданный параметр может "ссылаться" на другой, а он в свою очередь на первый, и проверка всех вариантов точно не будет проще.
Так что извращаемся
-
IvanLis
- guru
- Сообщения: 5462
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Можно ли прервать рекурсивный вызов?
А для чего Вам рекурсия если Вы ее не можете контролировать.
Всегда можно без нее обойтись.
Посмотрите viewtopic.php?f=23&t=5578&p=46330
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- assistant
- Сообщения: 113
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Можно ли прервать рекурсивный вызов?
Так в этом и вопрос был - как её контролировать. Обойтись можно и без неё, но при контроле она ничем не хуже обычных способов, которые могут быть ещё более извращенными.IvanLis писал(а): ↑03 сен 2021, 22:37
А для чего Вам рекурсия если Вы ее не можете контролировать.
Всегда можно без нее обойтись.
Посмотрите viewtopic.php?f=23&t=5578&p=46330
-
IvanLis
- guru
- Сообщения: 5462
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Можно ли прервать рекурсивный вызов?
ну так если у Вас проблемы возникли, то контроль не удачен.Sergey Puzanov писал(а): ↑06 сен 2021, 11:41 Так в этом и вопрос был - как её контролировать. Обойтись можно и без неё, но при контроле она ничем не хуже обычных способов, которые могут быть ещё более извращенными.
Можно например по этому параметру контролировать, т.е. это фактически аварийный выход получится, если другие проверки не сработают.
Функция имеет входной параметр "глубина". С каждым вызовом "вглубь" нужно делать +1 и передавать параметр на следующий уровень. А если значение превышает заданное, то последующие шаги в глубину не выполнять.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...