我想在R中编写递归函数,它将执行以下操作:
A_x(0) = 0
A_x(1) = q[4,1]+q[4,2] * A_x(0) = 1
A_x(2) = q[3,1]+q[3,2] * A_x(1) = 5
A_x(3) = q[2,1]+q[2,2] * A_x(2) = 23
A_x(4) = q[1,1]+q[1,2] * A_x(3) = 119
我写了以下代码:
n<-5
q<-matrix(c(4,5,3,4, 2, 3, 1,2,0,1), nrow=5, ncol=2, byrow=TRUE)
A_x <- function(x) {
for(i in n:0) {
if (x == 0) return (q[i,1])
else
return (q[i-1,1]+q[i-1,2]*A_x(x-1))
}
}
显然,从我的代码中我不清楚每次执行for循环时我想要更高一行。相反,看起来函数总是从单元格q [4,1]和q [4,2]中获取值。
非常感谢任何帮助, 威斯纳
答案 0 :(得分:2)
试试这个:
A_x <- function(q, Ax, n){
i <- nrow(q) - n
if (i == 0) q[i, 1]
else
q[i, 1] + q[i, 2] * Ax[n]
}
Ax <- 0
for(i in 1:nrow(q)){
Ax <- c(Ax, A_x(q, Ax, i))
}
Ax
结果:
> Ax
[1] 0 1 5 23 119