exponenta event banner

Создание кода для рекурсивных функций

Для создания кода для рекурсивных функций MATLAB ® генератор кода использует рекурсию во время компиляции или рекурсию во время выполнения. Изменение кода MATLAB может повлиять на то, использует ли генератор кода рекурсию во время компиляции или во время выполнения. См. раздел Принудительное использование генератора кода для рекурсии во время выполнения .

Можно запретить рекурсию или отключить рекурсию во время выполнения, изменив параметры конфигурации.

При использовании рекурсивных функций в коде MATLAB, предназначенном для создания кода, необходимо соблюдать определенные ограничения. См. раздел Ограничения рекурсивных функций для создания кода.

Рекурсия во время компиляции

При компилируемой рекурсии генератор кода создает несколько версий рекурсивной функции в сгенерированном коде. Входные данные каждой версии имеют значения или размеры, настроенные для этой версии. Эти версии известны как функциональные специализации. Можно определить, что генератор кода использовал рекурсию во время компиляции, просмотрев отчет MATLAB Function или сгенерированный код C. Ниже приведен пример рекурсии времени компиляции в отчете.

Рекурсия во время выполнения

При рекурсии во время выполнения генератор кода создает рекурсивную функцию в сгенерированном коде. Можно определить, что генератор кода использовал рекурсию во время выполнения, просмотрев отчет MATLAB Function или сгенерированный код C. Ниже приведен пример рекурсии во время выполнения в отчете.

Запретить рекурсию

В параметрах конфигурации модели установите предел рекурсии Compile-time для функций MATLAB равным 0.

Отключить рекурсию во время выполнения

Некоторые стандарты кодирования, такие как MISRA ®, не допускают рекурсию. Чтобы увеличить вероятность создания кода, соответствующего MISRA C ®, отключите рекурсию во время выполнения.

В параметрах конфигурации модели снимите флажок Включить рекурсию во время выполнения для функций MATLAB.

Если код требует рекурсии во время выполнения и рекурсия во время выполнения отключена, необходимо переписать код, чтобы он использовал рекурсию во время компиляции или не использовал рекурсию.

Ограничения рекурсивной функции для генерации кода

При использовании рекурсии в коде MATLAB, предназначенном для создания кода, выполните следующие ограничения:

  • Функция верхнего уровня в блоке MATLAB Function не может быть рекурсивной функцией, но может вызывать рекурсивную функцию.

  • Назначьте все выходы рекурсивной функции времени выполнения перед первым рекурсивным вызовом в функции.

  • Назначьте все элементы выходных данных массива ячеек рекурсивной функции времени выполнения.

  • Входы и выходы рекурсивных функций времени выполнения не могут быть классами.

  • Параметр Максимальный размер стека игнорируется для рекурсии во время выполнения.

Связанные темы