0

正の整数Kを取り、値を返す次のアルゴリズムが与えられました。

X = 1
Y = 1
while X ≠ K do
    X = X + 1
    Y = Y * x
return Y

私はそれが何を返すかを理解することになっています。

たまたま、答えはわかっています — それはKの階乗を返します— しかし、その理由はわかりません。

この疑似コードが何をするのかを理解するにはどうすればよいでしょうか?

4

3 に答える 3

1
X = 1 <- this is counter which you gonna multiply in every step
Y = 1 <- this is to store the cumulative product after each step
while X ≠ K do <- until you reach K
    X = X + 1 <- increase X
    Y = Y * X <- multiply with increased X
return Y <- return the product

したがって、ループでは、累積積は次のようになります1 -> 1*2 - > 2*3 -> 6*4 -> ... -> 1*2*..*(K-1)*KK!

于 2013-07-20T16:54:51.733 に答える
0

このコードは (C/C++/Java で) 次のように簡単に書き直すことができます。

for(X=1;X<=K;X++){
    Y=Y*X;
}

今ではそれ自体を説明しています:-)

于 2013-07-20T18:59:58.140 に答える
0

ここで、K が 5 であると仮定します。したがって、5 の階乗は 120 です。ループに入ると、X の値は 2 になり、y の値は 2 になります。(1*2) 次に、ループに入った後の X の値は 3 です。 (3*2) であるため、Y の値は 6 になります。次に、ループに入った後の X の値は 4 であり、(4*6) であるため、Y の値は 24 になります。次に、ループに入った後の X の値は 5 であり、Y の値は 120 になります。次に、X==Y であるため、while ループが終了し、階乗である Y の値が返されます。

于 2013-07-20T17:07:33.667 に答える