递归函数的代码生成
为了生成 MATLAB® 递归函数的代码,代码生成器使用编译时递归或运行时递归。您可以通过修改您的 MATLAB 代码来影响代码生成器是使用编译时递归还是运行时递归。请参阅Force Code Generator to Use Run-Time Recursion。
当您在用于代码生成的 MATLAB 代码中使用递归函数时,必须遵守某些限制。请参阅用于代码生成的递归函数限制。
编译时递归
使用编译时递归,代码生成器会在生成的代码中创建递归函数的多个版本。每个版本的输入都具有针对该版本自定义的值或大小。这些版本称为函数特化。通过查看 MATLAB Function 报告或生成的 C 代码,您可以知道代码生成器使用了编译时递归。以下是报告中显示的编译时递归的示例。
运行时递归
使用运行时递归,代码生成器会在生成的代码中生成递归函数。通过查看 MATLAB Function 报告或生成的 C 代码,您可以知道代码生成器使用了运行时递归。以下是报告中显示的运行时递归的示例。
禁止递归
在模型配置参数中,将 MATLAB 函数的编译时递归限制设置为 0。
禁用运行时递归
有些编码标准(例如 MISRA®)不允许递归。要提高生成符合 MISRA C® 的代码的可能性,请禁用运行时递归。
在模型配置参数中,清除为 MATLAB 函数启用运行时递归复选框。
如果您的代码需要运行时递归但运行时递归被禁用,则必须重写代码,以便它能够使用编译时递归或不使用递归。
用于代码生成的递归函数限制
在用于代码生成的 MATLAB 代码中使用递归时,请遵循以下限制:
MATLAB Function 模块中的顶层函数不能是递归函数,但它可以调用递归函数。
在运行时递归函数中进行第一次递归调用之前,为该函数的所有输出赋值。
为运行时递归函数的元胞数组输出的所有元素赋值。
运行时递归函数的输入和输出不能是类。
对于运行时递归,最大堆栈大小参数将被忽略。