我正在尝试创建一个递归函数,它将进行矩阵乘法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
然而,当我调用该函数时,我收到一条错误消息。
错误:评估嵌套太深:无限递归/选项(表达式=)?
换行时出错:评估嵌套太深:无限递归/选项(表达式=)?
你能解释一下为什么函数不起作用以及如何修改代码?
答案 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