【问题标题】:Recursive function is returning error message递归函数返回错误信息
【发布时间】:2017-05-13 21:54:51
【问题描述】:

我正在尝试创建一个递归函数来进行矩阵乘法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

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

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

您能解释一下为什么该功能不起作用以及应该如何修改代码吗?

【问题讨论】:

    标签: r function recursion


    【解决方案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
    

    【讨论】:

    • OP 的数据:P &lt;- structure(c(0.6, 0.2, 0.3, 0.1, 0.7, 0.3, 0.3, 0.1, 0.4), .Dim = c(3L, 3L))
    猜你喜欢
    • 1970-01-01
    • 2018-01-04
    • 2021-06-18
    • 2015-02-08
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多