正の整数Kを取り、値を返す次のアルゴリズムが与えられました。
X = 1
Y = 1
while X ≠ K do
X = X + 1
Y = Y * x
return Y
私はそれが何を返すかを理解することになっています。
たまたま、答えはわかっています — それはKの階乗を返します— しかし、その理由はわかりません。
この疑似コードが何をするのかを理解するにはどうすればよいでしょうか?
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)*K
。K!
このコードは (C/C++/Java で) 次のように簡単に書き直すことができます。
for(X=1;X<=K;X++){
Y=Y*X;
}
今ではそれ自体を説明しています:-)
ここで、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 の値が返されます。