我想递归计算函数中的长周期
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
无法正常检查。所以我真的很感激你的回答!!!
答案 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