[R-sig-hpc] [R] recursion depth limitations

Suzen, Mehmet msuzen at gmail.com
Fri Dec 14 12:25:25 CET 2012


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



More information about the R-sig-hpc mailing list