在R中嵌套函数直到满足条件

时间:2017-09-27 22:23:57

标签: r algorithm nested

我正在寻找一种在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&
谢谢。

2 个答案:

答案 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