我有这个递归函数,我试图在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)
?
答案 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