R递归函数嵌套太深

时间:2016-07-13 09:51:12

标签: r function recursion

我有这个递归函数,我试图在x(n) = 1000时找到结果。

x <- function (n) if (n==1) 1 else {(13*Recall(n - 1) + 7) %% 112233}

我可以在n < 600或其他时使用此代码,但在n > 600我得到

  

&#34;评估嵌套太深:   无限递归/选项(表达式=)?&#34;。

如何更改代码以计算x(1000)

1 个答案:

答案 0 :(得分:0)

AFAIK GNU-R使用c调用堆栈,因此它不适合冗长的递归。迭代版本你可能会变得更好:

x2 <- function(n) {
 acc <- 1;
 m <- 1;
 repeat {
   acc <- (13*acc+7) %% 112233
   m <- m+1
   if (m>=n) break
 }
 acc
}

e.g。

> x2(600)
[1] 67812
> x2(1000)
[1] 9292