Pythonで階乗を計算する3つの方法|forループ・再帰・math.factorial()の使い方
階乗(factorial)の計算は、データ分析をはじめとする数学的な処理において、Pythonでよく求められる操作の一つです。階乗とは、正の整数 n に対して、1から n までのすべての整数を掛け合わせた値のことです(例:5! = 1 × 2 × 3 × 4 × 5 = 120)。この記事では、Pythonで階乗を求める3つの方法を、コード例と実行結果とともにわかりやすく解説します。
方法1:forループを使う
forループで1から目的の数値まで順番に処理し、各ステップで掛け算を繰り返していく方法です。以下のプログラムでは、ユーザーに数値の入力を促し、ループ処理の前にint()で入力値を整数に変換しています。これにより、計算には正の整数のみが使用されることが保証されます。
コード例
n = input("Enter a number: ")
factorial = 1
if int(n) >= 1:
for i in range(1, int(n) + 1):
factorial = factorial * i
print("Factorial of ", n, " is : ", factorial)実行結果
上記のコードを実行すると、次のような結果が出力されます。
Enter a number: 5 Factorial of 5 is : 120
方法2:再帰(Recursion)を使う
関数が自分自身を呼び出す「再帰」を利用した実装方法です。引数が1であれば1を返し、1未満であれば「NA」(計算不能)を返すことで、負の数の入力にも対応しています。
コード例
num = input("Enter a number: ")
def recur_factorial(n):
if n == 1:
return n
elif n < 1:
return ("NA")
else:
return n * recur_factorial(n - 1)
print(recur_factorial(int(num)))実行結果
上記のコードを実行すると、次のような結果が出力されます。
#Run1: Enter a number: 5 120 #Run2: Enter a number: -2 NA
方法3:math.factorial()を使う
Pythonの標準ライブラリであるmathモジュールには、階乗を計算するための関数math.factorial()が用意されています。階乗のロジックを自前で実装する必要はなく、この関数を呼び出すだけで済むため、最もシンプルな方法です。また、負の数や小数が入力された場合にはValueErrorが発生するため、不正な入力に対しても適切にエラーとして扱われます。
コード例
import math
num = input("Enter a number: ")
print("The factorial of ", num, " is : ")
print(math.factorial(int(num)))実行結果
上記のコードを実行すると、次のような結果が出力されます。
#Run1: Enter a number: 5 The factorial of 5 is : 120 #Run2: Enter a number: 3.6 Traceback (most recent call last): The factorial of 3.6 is : File "C:/Users....py", line 5, in <module> print(math.factorial(int(num))) ValueError: invalid literal for int() with base 10: '3.6'
まとめ:どの方法を選ぶべきか?
- 学習・理解目的: 階乗の仕組みを深く理解したい場合は、forループや再帰による実装がおすすめです。アルゴリズムの動きを追いやすく、プログラミングの基礎固めにも役立ちます。
- 実務での利用: 実際の開発では、標準ライブラリのmath.factorial()を使うのが最適です。コードが簡潔になるだけでなく、内部が最適化されているため高速で、入力値の検証も自動的に行われます。
- 注意点: 再帰を使う方法は、大きな数値を渡すと再帰回数の上限に達し、RecursionErrorが発生する可能性があるため注意が必要です。
-
Pythonで数値の階乗を計算するプログラム:再帰と反復の2つのアプローチを解説
本記事では、与えられた問題文に対する解決策とアプローチについて学びます。 問題の定義 問題文: n の階乗(factorial)を計算することがタスクです。 非負整数 n の階乗は、以下のように定義されます。 n! = n × (n-1) × (n-2) × (n-3) × … × 3 × 2 × 1 例えば、6 の階乗は「6! = 6 × 5 × 4 × 3 × 2 × 1 = 720」となります。また、0 の階乗は定義により 1 とみなされます。 この問題には、主に以下の2つの解法があります。 再帰的アプローチ(Recursive) 反復的アプローチ(Iterative) アプローチ1
-
Pythonで数値の階乗を求める方法を解説!forループとrange関数の使い方
階乗(factorial)とは、1からその数までのすべての整数を掛け合わせた積のことです。例えば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。 Pythonで指定した数の階乗を求めるには、range()関数を使って1からその数まで繰り返すforループを作成します。ここで注意すべき点は、range()関数は終了値(ストップ値)を含まないという仕様です。そのため、終了値は入力された数値より1大きい値(num+1)を指定する必要があります。 階乗を求めるPythonコードの例 ループ内では、各数値を変数 f に累積的に掛けていきます。この変数 f は初期値として 1 を設