使用lapply进行递归(因此没有foor循环)

时间:2017-12-05 12:18:38

标签: r recursion lapply

我想解决R中的递归函数,定义为

p(t) = 0.5p(t-1) + 0.2p(t-2)

对于t = 3,...,100,其中给出了初始值p(1), p(2)

我知道使用for循环就可以解决这个问题,如下所示:Using R to solve a recursion function

我想知道在R中使用lapply()函数是否也可以这样做?我认为它应该有可能,但我不知道从哪里开始。我很欣赏任何提示。

1 个答案:

答案 0 :(得分:0)

当然你可以使用lapply的递归函数。

p <- function(t){
  if(t == 1){ return(1) } # arbitrary number
  if(t == 2){ return(2) } # arbitrary number

  return( 0.5*p(t-1) + 0.2*p(t-2) ) 
}

lapply(3:100, p)  

请注意,在没有某种记忆的情况下使用递归函数来解决这个问题是一个坏主意,因为它具有指数复杂性。

以下代码适用于线性时间:

p_tab <- c(1, 2, rep(-1, 98)) # 1 and 2 arbitrary numbers
p <- function(t){
  if(p_tab[t] != -1) return(p_tab[t])

  p_tab[t] <<- 0.5*p_tab[t-1] + 0.2*p_tab[t-2]
}

p_tab <- unlist(lapply( 1:100, p))  

p_tab将填入您需要的数字。例如,p_tab[100]将是p(100),如果那是你需要的那个。