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

Иногда специализации функции не появляются в коде C/C + + из-за оптимизации. Например, рассмотрим эту функцию:
function y = foo() %#codegen x = 10; y = sub(x); end function y = sub(x) coder.inline('never'); if x > 1 y = x + sub(x-1); else y = x; end end
В отчете по созданию кода на закладке Список функций отображаются специализации функций для функции MATLAB. sub.

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

В объекте конфигурации создания кода установите значение CompileTimeRecursionLimit параметр конфигурации 0.
В приложении MATLAB Coder™ установите значение предела рекурсии Compile-time равным 0.
Некоторые стандарты кодирования, такие как MISRA ®, не допускают рекурсию. Чтобы увеличить вероятность создания кода, соответствующего MISRA C ®, отключите рекурсию во время выполнения.
В объекте конфигурации генерации кода установите EnableRuntimeRecursion кому false.
В приложении Кодер MATLAB установите параметр Включить рекурсию во время выполнения в значение No.
Если код требует рекурсии во время выполнения и рекурсия во время выполнения отключена, необходимо переписать код, чтобы он использовал рекурсию во время компиляции или не использовал рекурсию.
При использовании рекурсии в коде MATLAB, предназначенном для создания кода, выполните следующие ограничения:
Назначьте все выходы рекурсивной функции времени выполнения перед первым рекурсивным вызовом в функции.
Назначьте все элементы выходных данных массива ячеек рекурсивной функции времени выполнения.
Входы и выходы рекурсивных функций времени выполнения не могут быть классами.
Параметр максимального использования стека игнорируется для рекурсии во время выполнения.