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

Pythonで階乗を計算する方法:math.factorial・反復・再帰の3つの手法を徹底解説

Pythonで階乗を計算する方法

「階乗(かいじょう)」という言葉は、高校の数学の授業で覚えた方も多いでしょう。電卓なしで階乗を計算するのは決して簡単ではありません。10の階乗を1×2×3×4…と手作業で掛けていくのは、誰もやりたくないはずです。

Pythonには、階乗を計算する方法がいくつかあります。このガイドでは、次の3つのアプローチについて詳しく解説します。

  • math.factorial()メソッドを使う方法
  • 再帰関数を使う方法
  • 反復処理(ループ)を使う方法

それでは早速始めましょう!

階乗とは?

階乗とは、1からある数までのすべての整数を掛け合わせた積のことです。

数式で表すと、階乗は次のようになります。

n! = 1x2x3...n

感嘆符(!)は階乗を計算することを示す記号です。「n」は階乗を求めたい対象の数値であり、n以下のすべての整数を掛け合わせ終わった時点で計算が完了します。

なお、負の数に対して階乗を計算することはできない点に注意してください。

Pythonの階乗:math.factorial()

Pythonのmathモジュールを使えば、階乗を簡単に計算できます。このライブラリには、数学的な処理を行うためのさまざまなメソッドが用意されており、例えば乱数の生成などにも利用できます。

math.factorial()メソッドは数値を受け取り、その階乗を返します。このメソッドを使う前に、まずmathライブラリをコードにインポートする必要があります。

import math

それでは、17の階乗を求めるPythonプログラムを書いてみましょう。

number = 17
fact = math.factorial(number)
print("The factorial of {} is {}.".format(number, str(fact)))

このコードを実行すると、次の出力が得られます。

The factorial of 17 is 355687428096000.(17の階乗は355687428096000です)

factorial()メソッドは、引数として渡された数値の階乗を計算して返します。その結果を「The factorial of 17 is 」というメッセージとともにコンソールへ出力しており、format()文を使うことで文字列の中に数値を埋め込んでいます。

Pythonの階乗:反復処理によるアプローチ

外部のPythonライブラリを使わなくても、階乗を計算できます。for文を使って、範囲内のすべての数値の積を順番に計算していけばよいのです。

まず、2つの変数を宣言しましょう。

number = 17
fact = 1

最初の変数は、階乗を求めたい数値を表します。2つ目の変数は、階乗の計算結果を追跡するためのものです。

次に、1からその数値までの範囲の各数値をループ処理するfor文を作成します。

for num in range(1, number+1):
	fact = fact * num

print("The factorial of {} is {}.".format(number, str(fact)))

for文が数値の階乗を計算し、print文でその結果を表示します。

このコードも同じく、次の出力を返します。

The factorial of 17 is 355687428096000.

この方法はmath.factorial()メソッドに比べるとやや効率が劣ります。なぜなら、math.factorial()はC言語ベースの実装で作られており、パフォーマンス面で多くのメリットがあるからです。

ただし、外部ライブラリに頼らずに階乗を計算したい場合には、反復処理によるアプローチが非常に便利な選択肢となります。

Pythonの階乗:再帰によるアプローチ

階乗は再帰関数を使っても計算できます。再帰関数とは、特定の問題を解くために自分自身を呼び出す関数のことです。

再帰関数は、数学的な数列の計算や数学的問題の解法によく使われます。これは、問題の答えを導き出すための明確な公式が定義されていることが多いためです。

Pythonファイルを開いて、次の関数を記述してください。

def calculate_factorial(number):
	if number == 1:
		return number
	else:
		return number * calculate_factorial(number - 1)

この関数は、数値の階乗を再帰的に計算します。続いて、この関数を使用するメインプログラムを書きましょう。

number = 17
fact = calculate_factorial(number)

print("The factorial of {} is {}.".format(number, str(fact)))

ここでは2つの変数を宣言しています。numberは階乗を求めたい数値、「fact」にはcalculate_factorial()関数の実行結果(計算された階乗)が代入されます。最後に、答えをコンソールに出力します。

このコードも同様に、次の出力を返します。

The factorial of 17 is 355687428096000.

まとめ

階乗は数学で広く使われる概念で、1からある数までのすべての整数を掛け合わせた積を指します。

Pythonで階乗を計算するには、math.factorial()、反復処理、再帰関数の3つの方法があります。反復と再帰のアプローチは、いわゆる「素のPython(vanilla Python)」だけで書けるため、ライブラリをインポートする必要がありません。

これであなたも、プロのようにPythonで階乗を計算できるようになりました!

  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 を設