我想解决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()
函数是否也可以这样做?我认为它应该有可能,但我不知道从哪里开始。我很欣赏任何提示。
答案 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)
,如果那是你需要的那个。