MENU
日報#8|階乗計算とresultのナゾ。

⬛︎階乗計算のコードの書き方を学んだ。
◼︎階乗計算のプログラミングを書くことができた。
・まず階乗計算とは、n!の計算のこと。例えばn=5なら、5*4*3*2*1のこと。
今回はnを引数として受け取り、nの階乗を返すという関数を定義する問題で、実際に書いたコードが以下。
def factorial(n):
result = 1
for i in range(1, n+1):
result = result * i
return result
def main():
x = factorial(5)
print(x)
if __name__ == '__main__':
main()
調べてこのコードに辿り着いたが、resultについてイマイチ理解しきれず、???だったため、相談した。
◼︎result = 1とresult = result * 1について理解した。
・result = 1については、まず1で初期化している。初期化というのは、変数を使用する前にその変数に初期値を代入する操作のこと。これにより、変数が未定義の状態で使用されることを防ぎ、プログラムの予期せぬ動作を防止する。
ではなぜ、「1」で初期化するのか。それは掛け算の単位元が「1」だから。単位元とは、演算においてある元(数)に作用しても、その値を変化させないような特別な元のこと。掛け算の場合は、どんな値aに対してもa*1=aが成り立つことから、単位元は「1」である。(ちなみに足し算の単位元は「0」)
・次に、result = result * iについて。ちなみに、今回は自分がわかりやすいようにこの書き方を選んだが、result *=iも同義。乗算子と呼ぶ。
先ほどresult = 1と宣言しているので、result = 1 * iでresult = iという答えになる。今回はiが1~nにある場合、計算が繰り返されるように指示しているので、例えばn=5だとしたら、
result = 1 * 1 = 1
result = 1 * 2 = 2
result = 2 * 3 = 6
result = 6 * 4 = 24
result = 24 * 5 = 120
のように積がresultに代入されていき、n=5まで計算される仕組みになっている。結果5!つまりn!が計算されたことになる。
わだはresultが両辺にあるところがイマイチ理解できていなくて、一度x=result*iで計算してみた。すると、例えばn=5だとして、まずx= 1*1=1という積が求められるが、この値を再度代入して計算するという工程が踏めないということに気づいた。代入して計算、代入して計算と繰り返していくためにresult=result*iという表記になっているということ。

コードを書くことができて、期待する出力結果を出せるというだけだったら、ググってコピペしたり、AI先生に聞いてチャチャっとできちゃうけど、ちゃんと理解しようと思うと、なかなか手強い…。でも今この期間をちゃんと自分の言葉にして理解して進んでいく
ってことが大切だと思うから、焦るなわだ!と思う今日この頃。
コメント