exponenta event banner

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

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

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

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

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

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

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

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

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

В объекте конфигурации ускорения кода задайте значение CompileTimeRecursionLimit параметр конфигурации 0.

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

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

В объекте конфигурации ускорения кода установите EnableRuntimeRecursion кому false.

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

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

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

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

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

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

  • StackUsageMax параметр конфигурации ускорения кода игнорируется для рекурсии во время выполнения.

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