MATLAB对递归的限制因素

时间:2015-12-04 02:37:12

标签: matlab recursion

某些编程语言(如Python)因其实现方式而具有递归限制。

看看Matlab,递归确实存在并且有效,但我注意到StackOverflow上有很少的帖子使用它。

除了几篇文章之外,官方的Matlab文档并没有真正提及它(请注意,这个列表可能不是一般的):

所以我的问题是:是否有一个理由特定于Matlab实现为什么我们不应该在Matlab上使用递归?

请注意,我的问题不是针对使用递归的优缺点,而是针对Matlab可能具有的递归特定限制。

2 个答案:

答案 0 :(得分:3)

在R2015b及更高版本中,MATLAB语言中的递归限制由内存量设置。鉴于像这样的愚蠢函数:

function out = recur(n)
if n == 1
    out = 0;
else
    out = recur(n - 1);
end
end

默认设置中recur(1000)的R2015a错误。在R2015b中,在我的机器上,我得到了这个:

>> tic, recur(70000); toc
Elapsed time is 0.008121 seconds.
>> tic, recur(80000); toc
Out of memory. The likely cause is an infinite recursion within the program.
Error in recur (line 5)
    out = recur(n - 1); 

答案 1 :(得分:2)

与其他脚本语言相比,MATLAB具有相对较高的函数调用开销。这使得递归涉及重复的函数调用,在MATLAB中特别昂贵。

此外,由于MATLAB的写时复制传值,任何修改传递矩阵的递归实现都会非常昂贵,因为每次都必须创建并删除新矩阵。