主要内容

递归函数的代码生成

为递归MATLAB生成代码®函数,代码生成器使用编译时间递归或者运行时间递归。您可以影响代码生成器是否使用编译时或运行时递归来修改MATLAB代码。看强制代码生成器使用运行时间递归

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

当您在MATLAB代码中使用用于代码生成的递归函数时,必须遵守某些限制。看代码生成的递归函数限制

编译时间递归

通过编译时间递归,代码生成器在生成的代码中创建多个版本的递归函数。每个版本的输入都具有为该版本自定义的值或大小。这些版本被称为功能专业您可以通过查看代码生成报告或生成的C代码来判断代码生成器使用编译时递归。以下是报告中编译时递归的示例。

有时,由于优化,函数专门效果不会出现在C / C ++代码中。例如,考虑此功能:

功能y = foo()%#codegen.x = 10;y = sub(x);结尾功能y =子(x)译码器.inline('绝不');如果x> 1 y = x + sub(x-1);别的y = x;结尾结尾

在代码生成报告中,在功能列表选项卡,您可以看到MATLAB功能的功能专业

但是,C代码不包含专业化。它包含一个返回值55的一个函数。

运行时间递归

通过运行时递归,代码生成器在生成的代码中产生递归函数。您可以通过查看代码生成报告或生成的C代码来判断代码生成器使用运行时递归。这是报表中运行时间递归的示例。

不允许递归

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

  • 在里面Matlab Coder™应用程序,设置值编译时间递归限制设置为0。

禁用运行时间递归

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

  • 在代码生成配置对象中,设置EnableRuntimerEvursion.错误的

  • 在里面Matlab编码器应用程序,集启用运行时递归

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

代码生成的递归函数限制

在用于代码生成的MATLAB代码中使用递归,请遵循以下限制:

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

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

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

  • 最大堆叠用法运行时递归忽略设置。

相关话题