2017-09-27 4 views
0

条件が満たされるまで、同じ関数をRにネストする効率的な方法を探しています。次の例が私の問題を明確に示してくれることを願っています
は> 1条件が満たされるまでRの関数をネストする

示す

F^{(K)}(X)= F(F Xと

F(X)= X^2 + 1、関数を検討します(f(... f(x)))))、

ここで、関数fはそれ自身k回評価される。 M> 0とし、Mを与える。
Rには、f^{(k)}(2)> Mであるようなkの最小値を決定するルーチンがありますか?
ありがとうございます。

+0

私は再帰関数 –

+0

こんにちは@Moody_Mudskipperを書くために、より自然なことだと思います。私の元の問題では、私は再帰関数を記述しようとしました。ただし、この再帰は不可能です。このため、私は代替アプローチを検討しています。あなたの提案をありがとう。 – Rodrigo

+0

mmm ...再帰がうまくいかない理由を示す例を示すべきである –

答えて

0

特別なことはありません。

function(x, M) { 
    k <- 0 
    repeat { 
    x <- x^2 + 1 
    k <- k + 1 
    if (x > M) 
     break 
    } 
    k 
} 

特に効率的ではないが、多くの場合、ループのオーバーヘッドよりも大きくなりますfを評価するオーバーヘッド:ちょうどループを使用します。これが当てはまらない場合(そして、この特定の場合はfではないかもしれません)、私はCまたはC++で(おそらくRcppを使用して)同等のことを行うことをお勧めします。

0

これは再帰的なアプローチのようになります。

# 2^2 + 1 == 5 
# 5^2 + 1 == 26 
# 26^2 + 1 == 677 

f <- function(x,M,k=0){ 
    if(x <= M) k <- f(x^2 + 1,M=M,k+1) 
    return(k) 
} 
f(2,3) # 1 
f(2,10) # 2 
f(2,50) # 3 
f(2,700) # 4 
+0

あなたのアプローチであるMoody_Mudskipperとuser2554330を考えると、問題は私が思ったよりも簡単だったことがわかります。あなたがた両方に感謝します。 – Rodrigo

関連する問題