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 に答える