如何进行无限递归?

时间:2016-09-24 14:57:21

标签: matlab

我必须让Matlab运行一个巨大的等式,我希望有无限的递归方程。我怎么设置它?我可以设置一个数字,但我怎么能说永不停止?如果它停止,那是因为计算机无法处理它。

一般命令是:

set(0,'RecursionLimit',999999)

1 个答案:

答案 0 :(得分:2)

使用无限递归的唯一方法是使用尾递归,但Matlab不支持尾递归。

您可以与可用内存兼容地增加递归限制。

否则,您必须转换代码以避免递归。

https://www.quora.com/What-is-infinite-recursion

递归在理论上可以是无限的,但如果我们打算在实际程序中使用无限递归,则意味着程序永远不会结束。

递归函数占用内存(堆栈内存): https://mitpress.mit.edu/sicp/full-text/sicp/book/node110.html

由于内存有限,您永远不能使用真正的无限递归。

此外,必须事先定义堆栈大小,因为堆栈需要存储在连续的内存位置: why is stack memory size so limited?

但是在计算机编程中有一个名为“Tail Recursion”的技巧,使用Tail Recursion,编译器或解释器将代码转换为优化的非递归代码: How exactly does tail recursion work?

http://c2.com/cgi/wiki?TailRecursion

就个人而言,我不知道计算机编程中任何其他解决方案来编写递归函数而不消耗堆栈。

MatLab不支持Tail Recursion优化:

https://it.mathworks.com/matlabcentral/answers/16309-tail-recursive-function-and-wrapper-function

抱歉英语不好。