某些编程语言(如Python)因其实现方式而具有递归限制。
看看Matlab,递归确实存在并且有效,但我注意到StackOverflow上有很少的帖子使用它。
除了几篇文章之外,官方的Matlab文档并没有真正提及它(请注意,这个列表可能不是一般的):
所以我的问题是:是否有一个理由特定于Matlab实现为什么我们不应该在Matlab上使用递归?
请注意,我的问题不是针对使用递归的优缺点,而是针对Matlab可能具有的递归特定限制。
答案 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的写时复制传值,任何修改传递矩阵的递归实现都会非常昂贵,因为每次都必须创建并删除新矩阵。