Pythonで階乗を計算する方法|再帰関数を使った実装例
10以下の整数 n が与えられたとき、その階乗(factorial)を求めることを考えます。階乗とは、次のように定義される値です。
n! = n × (n − 1) × (n − 2) × … × 1
たとえば、入力が 6 の場合、6! = 6 × 5 × 4 × 3 × 2 × 1 = 720 となるため、出力は 720 になります。
解き方のアプローチ
この問題は再帰(recursion)を使うとシンプルに解けます。手順は以下のとおりです。
- solve() という関数を定義し、引数として n を受け取る
- n ≤ 1 の場合は 1 を返す(再帰の終了条件=ベースケース)
- それ以外の場合は n * solve(n - 1) を返す(自分自身を再帰的に呼び出す)
このように「自分自身を呼び出す処理」を繰り返すことで、n から 1 まで順番に掛け合わせていくことができます。
実装例
以下のコードで具体的な動作を確認してみましょう。
class Solution:
def solve(self, n):
if(n <= 1): return 1
return n * self.solve(n - 1)
ob = Solution()
print(ob.solve(6))
入力
6
出力
720
補足:標準ライブラリを使う方法
なお、Pythonの標準ライブラリには math.factorial() が用意されているため、実際の開発では以下のようにより簡潔に記述することもできます。
import math
print(math.factorial(6)) # 出力: 720
再帰による実装はアルゴリズムの学習に最適であり、math.factorial() は実務での手軽な計算に便利です。用途に応じて使い分けるとよいでしょう。
-
Pythonでグラフの頂点間の到達可能性行列を計算するプログラム
隣接リスト形式で表現されたグラフが与えられたとき、次のような条件を満たす2次元行列Mを求めることを考えます。M[i, j] = 1:頂点iから頂点jへの経路(パス)が存在する場合M[i, j] = 0:経路が存在しない場合例えば、次のようなグラフが入力として与えられたとします。この場合の出力は、以下の5×5の行列になります。1111101111011110111101111解法のアプローチこの問題は、各頂点を起点とした幅優先探索(BFS)を用いることで効率的に解くことができます。具体的な手順は以下の通りです。n×nの2次元行列「ans」を作成し、すべての要素を0で初期化します(nは頂点の総数)
-
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