主要内容

递归函数的代码生成

为递归MATLAB生成代码®功能,代码生成器使用编译时递归运行时递归。你可以影响代码生成器使用是否通过修改您的MATLAB代码编译时和运行时递归。看到强制代码生成器使用运行时递归

你可以不允许递归禁用运行时递归通过修改配置参数。

当你使用递归函数在MATLAB用于代码生成的代码,您必须遵守一定的限制。看到递归函数限制代码生成

编译时递归

编译时递归,代码生成器创建多个版本的一个递归函数生成的代码。每个版本的输入值或尺寸定制版本。这些被称为版本功能专门化你可以告诉编译时代码生成器使用递归的代码生成报告或生成的C代码。这是一个编译时报告中递归的例子。

这张图片显示了在MATLAB编译时递归函数的结果报告

有时,专门化功能不会出现在C / c++代码的优化。例如,考虑这个函数:

函数y = foo ()% # codegenx = 10;y =子(x);结束函数y =子(x) coder.inline (“永远”);如果x > 1 y = x +子(x - 1);其他的y = x;结束结束

在代码生成报告函数列表选项卡上,你看到的功能专门化MATLAB函数

这张图片显示了在MATLAB函数结果报告函数foo。该报告还显示了MATLAB函数子的功能专门化

然而,C代码不包含专门化。它包含一个函数,返回值55。

运行时递归

与运行时递归代码生成器生成的代码生成一个递归函数。你可以告诉代码生成器使用递归运行时通过查看代码生成报告或生成的C代码。这是一个运行时报告中递归的例子。

这张图片显示了一个示例的一个运行时在报告中递归

不允许递归

  • 在代码生成配置对象,设置CompileTimeRecursionLimit配置参数为0。

  • MATLAB编码器™应用程序,设置的值编译时递归限制设置为0。

禁用运行时递归

一些编码标准,如MISRA™,不允许递归。生成代码的可能性增加,符合MISRA C™,禁用运行时递归。

  • 在一个代码生成配置对象,集EnableRuntimeRecursion

  • MATLAB编码器应用程序,启用运行时递归没有

如果您的代码需要运行时递归和递归运行时被禁用,你必须重写代码,以便它使用编译时递归或不使用递归。

递归函数限制代码生成

当你使用递归在MATLAB代码是用于代码生成,遵循这些限制:

  • 指定运行时的所有输出递归函数中的第一个递归调用函数之前。

  • 分配单元阵列输出的所有元素运行时递归函数。

  • 运行时递归函数的输入和输出不能类。

  • 最大堆栈的使用设置为运行时忽略了递归。

相关的话题