递归函数返回错误消息

时间:2017-05-13 21:54:52

标签: r function recursion

我正在尝试创建一个递归函数,它将进行矩阵乘法n次。

我的代码如下:

R <- function(P, n){

  R(P, n-1) %*% P

}

我希望用n = 3调用此函数来执行

(P %*% P) %*% P.

使用示例:

> P
     [,1] [,2] [,3]
[1,]  0.6  0.1  0.3
[2,]  0.2  0.7  0.1
[3,]  0.3  0.3  0.4

然而,当我调用该函数时,我收到一条错误消息。

  

错误:评估嵌套太深:无限递归/选项(表达式=)?
  换行时出错:评估嵌套太深:无限递归/选项(表达式=)?

你能解释一下为什么函数不起作用以及如何修改代码?

1 个答案:

答案 0 :(得分:1)

每个递归函数都应该有一个阈值,此时递归调用将停止。您定义的函数R没有这个条件,因为触发错误也提到了

  

评估嵌套太深:无限递归

所以,

R <- function(P, n){
    if (n==1) return(P)
    R(P, n-1) %*% P 
}

应该解决你的问题。举个例子:

r1 <- (P %*% P) %*% P
r2 <- R(P,3)
all(r1==r2)
#[1] TRUE