if else和for循环内部的递归函数

时间:2016-05-18 08:28:33

标签: r recursion

我想在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]中获取值。

非常感谢任何帮助, 威斯纳

1 个答案:

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