1

特定の数値の階乗を計算するために、次の関数を作成しました。

factorial <- function(x){
y <- 1
for(i in 1:x){
y <-y*((1:x)[i])
print(y)
}

}


factorial(6)

in console:

[1] 1
[1] 2
[1] 6
[1] 24
[1] 120
[1] 720

6!=720 なので、明らかに最後の数字は正しく、計算はすべての数字に対して機能します。

問題は、最後の数字だけをコンソールに出力したいのですが、それを行う方法はありますか? 関数内で y をベクトルに変換しようとしましたが、うまくいかないようです。

4

5 に答える 5

3

print画面に出力します。関数は、最後に評価された式 (または明示的なreturn値) の結果を返します。値を返すだけでなく、印刷しますか?

そうは言っても

Rには、整数値の場合の事実を使用して、factorialを呼び出す関数が既にあります。gamma(x+1)gamma(x+1) == x!

それで

factorial(6)

gamma(7)

あなたが書いた関数は、大きな数を乗算するときに整数オーバーフローの問題を抱えているだけでなくy、ループ内で繰り返し再割り当てしているため非常に非効率的です(必要がない場合は再帰的です)。

于 2013-02-22T00:23:21.233 に答える
3

print ステートメントをループ外に移動しますか?

for(i in 1:x){
    y <-y*((1:x)[i])
}
print(y)
于 2013-02-22T00:19:21.437 に答える
0

print()ループの外側に置くだけです

factorial <- function(x){
y <- 1
for(i in 1:x){
y <-y*((1:x)[i])
}
print(y)
}

この機能を改善することができます...なぜ(1:x)[i]、そしてそれだけではないのiですか? なぜprint()ではないのreturn()ですか?そして最も重要なことは、なぜfactorial()base パッケージを使用しないのかということです。

于 2013-02-22T00:22:38.023 に答える