我试图使用Matlab的Coder应用程序将Matlab中的递归函数转换为C/C++代码。通常,Coder会给出一个错误,说明不允许使用递归函数。但是,Matlab帮助页指出,如果您遵循以下指导原则,就可以从递归函数生成代码:
当您在MATLAB代码中使用用于生成代码的递归时,请遵循以下限制:
我基本上理解这些条件,但我不知道如何让Matlab接受递归代码。我使用了Matlab中的一个示例:
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但我仍然得到了“递归函数不允许”的错误。我自己代码的一个简化版本是:
%------------------------
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的代码生成和递归帮助页面,并使用我最喜欢的搜索引擎搜索了一个解决方案,但是我还没有找到一个清晰的、一步一步的过程。你的帮助将不胜感激。
https://stackoverflow.com/questions/64056080
复制相似问题