Main Content

递归函数的代码生成

为了生成 MATLAB® 递归函数的代码,代码生成器使用编译时递归运行时递归。您可以通过修改您的 MATLAB 代码来影响代码生成器是使用编译时递归还是运行时递归。请参阅Force Code Generator to Use Run-Time Recursion

您可以通过修改配置参数来禁止递归禁用运行时递归

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

编译时递归

使用编译时递归,代码生成器会在生成的代码中创建递归函数的多个版本。每个版本的输入都具有针对该版本自定义的值或大小。这些版本称为函数特化通过查看代码生成报告,您可以了解代码生成器是否使用了编译时递归。以下是报告中显示的编译时递归的示例。

This image shows the results of compile-time recursion in the MATLAB Function report

运行时递归

使用运行时递归,代码生成器会在生成的代码中生成递归函数。通过查看代码生成报告,您可以了解代码生成器是否使用运行时递归。以下是报告中显示的运行时递归的示例。

This image shows an example of a run-time recursion in the report

禁止递归

在代码加速配置对象中,将 CompileTimeRecursionLimit 配置参数的值设置为 0。

禁用运行时递归

有些编码标准(例如 MISRA™)不允许递归。要提高生成符合 MISRA C™ 的代码的可能性,请禁用运行时递归。

在代码加速配置对象中,将 EnableRuntimeRecursion 设置为 false

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

用于代码生成的递归函数限制

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

  • 在运行时递归函数中进行第一次递归调用之前,为该函数的所有输出赋值。

  • 为运行时递归函数的元胞数组输出的所有元素赋值。

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

  • 运行时递归忽略 StackUsageMax 代码加速配置参数。

相关主题