首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归函数的Matlab代码生成

递归函数的Matlab代码生成
EN

Stack Overflow用户
提问于 2020-09-25 00:18:40
回答 1查看 315关注 0票数 1

我试图使用Matlab的Coder应用程序将Matlab中的递归函数转换为C/C++代码。通常,Coder会给出一个错误,说明不允许使用递归函数。但是,Matlab帮助页指出,如果您遵循以下指导原则,就可以从递归函数生成代码:

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

  1. MATLAB函数块中的顶层函数不能是递归函数,但它可以调用递归函数。
  2. 在函数中的第一个递归调用之前,分配运行时递归函数的所有输出。
  3. 分配运行时递归函数的单元格数组输出的所有元素。
  4. 运行时递归函数的输入和输出不能是类。
  5. 对于运行时递归,忽略最大堆栈大小参数。

我基本上理解这些条件,但我不知道如何让Matlab接受递归代码。我使用了Matlab中的一个示例:

代码语言:javascript
运行
复制
function y = call_recursive()
   n =35;
   x = 10;
   y = myrecursive(x,n);
end

function y = myrecursive(x,n)
   coder.inline('never')
   if x > 1
       y = n + myrecursive(x-1,n-1); 
   else
       y = n;
   end
end

但我仍然得到了“递归函数不允许”的错误。我自己代码的一个简化版本是:

代码语言:javascript
运行
复制
%------------------------
function recursion_test()
   recursive_fn();
end %recursive caller
%------------------------
%------------------------
function recursive_fn()

persistent mycount;
if isempty(mycount) %initialize the persistent variable
   mycount = 0;
end

counter = 0;
while(counter<300)
   mycount = mycount + 1;
   if mycount<100 %some generic test condition
      recursive_fn();
   end
   if mycount<200 %another generic test condition
      recursive_fn();
   end %if
   counter = counter+1;
end
disp(counter);
end %recursive function
%------------------------

我的代码给出的错误与Matlab的例子相同。我的具体应用程序不应该进入递归,超过300个times...and,通常是50-90次。请注意,上面的代码没有准确地跟踪递归,但我在实际代码中确实有跟踪。我可以将递归限制在300次,并强制编译器复制300个递归基代码(我不知道如何执行that...but,这是另外一个问题)。首先,我希望能够使用上面的函数用Coder应用程序生成C/C++代码。

因此,任何人都可以解释如何为上面的递归函数生成C/C++代码。最低限度,我希望调用时间递归,但理想情况下,我也想知道运行时递归。注意,我已经浏览了Matlab的代码生成和递归帮助页面,并使用我最喜欢的搜索引擎搜索了一个解决方案,但是我还没有找到一个清晰的、一步一步的过程。你的帮助将不胜感激。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64056080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档