Python
 Computer >> コンピューター >  >> プログラミング >> Python

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が発生する可能性があるため注意が必要です。

  1. 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

  2. Pythonで数値の階乗を求める方法を解説!forループとrange関数の使い方

    階乗(factorial)とは、1からその数までのすべての整数を掛け合わせた積のことです。例えば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。 Pythonで指定した数の階乗を求めるには、range()関数を使って1からその数まで繰り返すforループを作成します。ここで注意すべき点は、range()関数は終了値(ストップ値)を含まないという仕様です。そのため、終了値は入力された数値より1大きい値(num+1)を指定する必要があります。 階乗を求めるPythonコードの例 ループ内では、各数値を変数 f に累積的に掛けていきます。この変数 f は初期値として 1 を設