递归地计算`log(log(log(134)))`

时间:2013-10-05 07:33:40

标签: r

我想递归计算函数中的长周期

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无法正常检查。所以我真的很感激你的回答!!!

2 个答案:

答案 0 :(得分: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)
}

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

答案 1 :(得分: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