1С 8.3 Рекурсия в 1С - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Рекурсия в 1С

Данные > Примеры кода 1С > 1С 8.3 Процедуры и Функции
Перейти в раздел примеры кода 1С 8.3:
Рекурсией в программировании называется явление вызова функции или процедуры по ее же алгоритму выполнения. В случае, когда функция вызывает себя опосредованно, рекурсия называется сложной или косвенной (а не простой или прямой, как в случае непосредственного вызова функцией самой себя). Из определения рекурсии следует вывод, что во избежание бесконечного увеличения стека вызовов, необходимо предусмотреть условие выхода – условие, при котором очередной рекурсивный вызов не произойдет, что положит начало "заворачиванию" стека, по окончании которого получим конечный результат.
Рекурсия в 1С 8.3:
&НаКлиенте
Процедура Сосчитать(Команда)
   СчетДоДесяти(ВхЧисло);
КонецПроцедуры

Процедура СчетДоДесяти(НачальноеЧисло)

   Если НачальноеЧисло <= 10 Тогда
       Сообщить(Строка(НачальноеЧисло));
       НачальноеЧисло = НачальноеЧисло + 1;
       СчетДоДесяти(НачальноеЧисло);
   Иначе //выход из рекурсии
       Сообщить("Счет окончен.");
       Возврат;
   КонецЕсли;

КонецПроцедуры
Результат выполнения команды «Начать» из приведенного примера, можно получить просто используя цикл, а не рекурсию. Такой вариант был бы лучше и с точки зрения производительности, ведь каждый вызов процедуры подразумевает выделение памяти под значения локальных переменных. Такой счет до десяти – пример линейной рекурсии в 1С. То есть каждый очередной вызов процедуры инициирует лишь один рекурсивный вызов или при выполнении условия выхода не инициирует вовсе.

Каскадная же рекурсия характерна тем, что очередной вызов процедуры может непосредственно инициировать два и более рекурсивных вызова. Примером каскадной рекурсии является алгоритм нахождения числа ряда Фибоначчи по его номеру в ряду:
Нахождения числа ряда Фибоначчи по его номеру в ряду в 1С 8.3:
&НаКлиенте
Процедура Фибоначчи(Команда)
   Сообщить(ПолучитьЧислоРядаФибоначчи(ВхЧисло));
КонецПроцедуры

Функция ПолучитьЧислоРядаФибоначчи(ЧислоВРяду)

   Если ЧислоВРяду < 2 Тогда
       Возврат ЧислоВРяду;
   КонецЕсли;

   Возврат ПолучитьЧислоРядаФибоначчи(ЧислоВРяду - 1) + ПолучитьЧислоРядаФибоначчи(ЧислоВРяду - 2);

КонецФункции
Перепечатано с открытых источников.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 15.07.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому