Pythonで再帰関数を使って階乗を求める方法
再帰(リカージョン)とは、関数が自分自身を呼び出すことで問題を解決するプログラミング手法です。階乗の計算は、この再帰処理の仕組みを学ぶのに最適な題材として広く知られています。
正の整数 n の階乗(n!)は、1 から n までのすべての整数を掛け合わせた値です。たとえば、6 の階乗は次のように計算されます。
6! = 6 × 5 × 4 × 3 × 2 × 1 = 720
再帰を使った階乗計算のコード例
次のコードでは、n = 6 と n = 15 の場合の階乗を計算しています。
def factorial(n):
if n == 1:
return 1
else:
res = n * factorial(n-1)
return res
print("factorial(6) = %d" % factorial(6))
print("factorial(15) = %d" % factorial(15))実行結果
このコードを実行すると、次の出力が得られます。
factorial(6) = 720 factorial(15) = 1307674368000
コードの仕組み
この関数がどのように動作するのか、factorial(4) を例にして確認してみましょう。
- factorial(4) は 4 × factorial(3) を返す
- factorial(3) は 3 × factorial(2) を返す
- factorial(2) は 2 × factorial(1) を返す
- factorial(1) は 1 を返す(ここが再帰の終了条件)
すべての呼び出しが展開されると、4 × 3 × 2 × 1 = 24 という結果が導かれます。このように、大きな問題を同じ構造の小さな問題へと分解しながら解決していくのが再帰の基本的な考え方です。
注意点
再帰関数には必ず終了条件(ベースケース)が必要です。上記の例では n == 1 がそれに該当します。終了条件がないと、関数は無限に自分自身を呼び出し続け、Python では「RecursionError: maximum recursion depth exceeded」というエラーが発生します。また、0 や負の数を引数として渡した場合の挙動も考慮し、必要に応じて入力チェックを追加することをおすすめします。
-
【初心者向け】Pythonで挿入ソートを実装する方法|仕組みとコード例をわかりやすく解説
Pythonの挿入ソート(Insertion Sort)は、手札のトランプカードを並べ替える作業によく似ています。挿入ソートでは、「整列済みリスト」と「未整列リスト」の2つの領域を作り、未整列リストの要素を1つずつ取り出しては正しい位置へと挿入していきます。挿入ソートはPythonにおける基本的なアルゴリズムのひとつであり、学習しておく価値のある重要な概念です。 トランプの手札を並べ替えた経験はありませんか?それこそが、Pythonの挿入ソートを理解するための最良のイメージです。要素数の少ないリストを並べ替えたいとき、挿入ソートはとても便利な選択肢になります。 この記事では、挿入ソートとは
-
Python Matplotlibで多変量関数をプロットする方法
Pythonで多変量関数(複数の変数を持つ関数)を視覚的に表現したい場合、Matplotlibの散布図を活用すると、x・y・zの3つの変数の関係を1つのグラフ上で直感的に把握できます。ここでは、具体的な手順とサンプルコードを交えて解説します。実装の手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使って、ランダムな x、y、z のデータ点を生成します。図(figure)とサブプロット(axes)のセットを作成します。x・y・z のデータ点をもとに散布図を描画します。ScalarMappableインスタンス s に対してカラーバーを作成し、z値の色の対