我正在寻找一种在R中嵌套相同函数的有效方法,直到满足条件。我希望下面的例子能清楚地说明我的问题 考虑函数
f(x)= x ^ 2 + 1 ,x> 1.
表示
f ^ {(k)}(x)= f(f(f(... f(x)))),
其中函数f在其自身内被评估k次。设M> 0,M给出。
在R中是否存在任何有效的例程来确定k的最小值,使得f ^ {(k)}(2)> M&
谢谢。
答案 0 :(得分:0)
没什么特别之处。只需使用循环:
function(x, M) {
k <- 0
repeat {
x <- x^2 + 1
k <- k + 1
if (x > M)
break
}
k
}
效率不高,但评估f
的开销通常会高于循环的开销。如果情况并非如此(并且它可能不适用于此特定f
),我建议在C或C ++中使用相同的东西(可能使用Rcpp
)。
答案 1 :(得分:0)
这将是递归方法:
# 2^2 + 1 == 5
# 5^2 + 1 == 26
# 26^2 + 1 == 677
f <- function(x,M,k=0){
if(x <= M) k <- f(x^2 + 1,M=M,k+1)
return(k)
}
f(2,3) # 1
f(2,10) # 2
f(2,50) # 3
f(2,700) # 4