为递归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代码中使用递归,请遵循以下限制:
在函数中的第一个递归调用之前分配运行时递归函数的所有输出。
分配运行时递归函数的单元格阵列输出的所有元素。
运行时递归函数的输入和输出不能是类。
这最大堆叠用法运行时递归忽略设置。