recursion depth limitations
On 14 December 2012 12:13, Suzen, Mehmet <suzen at acm.org> wrote:
On 13 December 2012 23:21, Rui Barradas <ruipbarradas at sapo.pt> wrote:
But it does, each recursive call will load another copy of the function, and another copy of the variables used. In fact, the cost can become quite large since everything is loaded in memory again. Hope this helps,
Many thanks for the replies. What about tail-recursion? I have seen that there were discussions about this: https://stat.ethz.ch/pipermail/r-help/2006-April/102873.html Since it was 6 years ago, maybe now things are little different.
Isn't it logical to translate any recursive function to tail-recursive internally? While tail-recursive version returns a value but the operation is essentially the same. I don't know how difficult to do it generically but maybe there is an advantage of keeping recursion as it is. What would that advantage be? For example, tail recursion would run but not the recursive version:
options(expressions=500000) f <- function(x) if(x >0) f(x-1); system.time(f(10000000))
Error: C stack usage is too close to the limit Error: C stack usage is too close to the limit
f1<-function(x) x-1 f <- function(x) f1(x); system.time(f(10000000))
user system elapsed
0 0 0