0

我想递归计算函数中的日志循环

logCounter <- function(number) {
    k <- 0
    if(k>=0){
        k = k+1
    }
    result <- log(number)
    if (result > 1) {
        logCounter(result)
    } else {
        return(k)
    }
}

logCounter(123)#returns 3 because log(log(log(123))) < 1

然而,我的柜台 k并没有像我检查的那样工作。所以我真的很感激你的回答!!!

4

2 回答 2

2

你不需要使用Recall. 尝试这个:

logCounter <- function(number) {
  if (number <1) return(0) # A minor edit.
  result <- log(number)
  if (result > 1) return(logCounter(result)+1)
  return(1)
}

关键是尝试以不需要存储中间结果的方式组合您的函数。

于 2013-10-05T08:26:02.707 回答
1

您可以更轻松地做到这一点,而无需使用while循环递归调用函数:

logCounter <- function(number) {
    k <- 0
    result <- number
    while(result>1){
        k <- k + 1
        result <- log(result)
    }
    return(k)
}

> logCounter(123)
[1] 3

编辑:如果您需要使用递归,请考虑以下Recall功能:

logCounter <- function(number, iter=1) {
    if(log(number)>1)
        out <- Recall(log(number), iter+1)
    else
        out <- list(log(number),iter)
    return(out)
}

> logCounter(123)
[[1]]
[1] 0.4518085

[[2]]
[1] 3
于 2013-10-05T07:58:45.863 回答