总结同一递归函数中递归函数的结果

时间:2018-12-12 16:12:09

标签: r recursion

我想建立一个像

这样的数据框

enter image description here

在我的头上,我有一个数字n 在阶乘中,阶乘(n)是递归函数 总而言之,以前的工厂值之和。

我编写了一个递归函数,该函数成功生成了head和factorial列,但仍然在sum列上苦苦挣扎。

谢谢

R代码下方

fact <- function(n, x){
  if (n<=1){
    return (n)
  } else {
    n*fact(n-1)
  }
}



recurDf <- function(n, df){
  if (n<=1){
    df <- rbind (df,   data.frame("value" = paste('Value', n) , "factorial" = n, "previous.sum" = 1) )
    return (df)
  } else {
    if(is.null(df)) {
      #df <- data.frame(matrix(ncol = 3, nrow = 0))
      #colnames(df) <- c("value", "factorial", "previous.sum")
      df <- data.frame("value"= 'va', "factorial" =0, "previous.sum" = 0)
    }

    rbind (recurDf(n-1,df), data.frame("value" = paste('Value', n) , "factorial" = fact(n), "previous.sum" = sum(recurDf(n-1,df)$factorial) ))

  }
}

recurDf(4, NULL)

2 个答案:

答案 0 :(得分:1)

以下内容在其第一个分量中返回n的因数,并在其第二个参数中返回所有阶乘的累加和。

fact2 <- function(n) {
  if (n <= 1) c(1,1)
  else {
    prev <- Recall(n-1)
    n * prev[1] + c(0, prev[2])
  }
}

fact2(1)
## [1] 1 1
fact2(2)
## [1] 2 3
fact2(3)
## [1] 6 9
fact2(4)
## [1] 24 33

cbind(1:4, t(sapply(1:4, fact2)))
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    2    2    3
## [3,]    3    6    9
## [4,]    4   24   33

答案 1 :(得分:1)

您是否有理由需要递归执行此操作?

有很多简单的方法可以得到答案。

recurDf <- function(n){
  df <- data.frame("value" = c(paste('Value',1:n)) , "factorial" = c(1:n)) 
  df$factorial <- factorial(df$factorial)
  df$previous.sum <- cumsum(df$factorial)
  return (df)
}

recurDf(4)

这将返回

    value     factorial   previous.sum
 1 Value 1         1            1
 2 Value 2         2            3
 3 Value 3         6            9
 4 Value 4        24           33