Pythonで再帰関数を使う方法!階乗・フィボナッチ数列の実装例
生徒
「先生、Pythonで『再帰関数』って聞いたんですが、どういうものですか?」
先生
「再帰関数は、自分自身を呼び出す関数のことですよ。ちょっと不思議に思うかもしれませんが、とても便利な方法です。」
生徒
「自分で自分を呼ぶってどういうこと?無限ループにならないんですか?」
先生
「いい質問ですね。再帰関数は『終了条件』を決めておくので、必ず終わります。わかりやすく説明しますね!」
1. 再帰関数とは?自分自身を呼び出す関数の基本
再帰関数とは、関数の中で自分自身を呼び出す関数のことです。プログラムの中で同じ処理を繰り返し使いたいときに使います。
でも、無限に呼び続けたらプログラムが止まらなくなるので、必ず「終了条件(ベースケース)」を用意して、その条件を満たしたら処理を終わるようにします。
2. 再帰関数の仕組みを簡単にイメージしよう
たとえば、鏡の前に鏡を置いて鏡が無限に続くように見えるイメージがありますが、再帰関数は「自分を呼び出すけど、いつか終わる」という仕組みです。
具体的には、「自分で自分を呼ぶ」→「条件に当てはまればやめる」この繰り返しで成り立っています。
3. Pythonでの再帰関数の書き方
再帰関数は普通の関数とほとんど同じですが、関数の中で自分自身を呼び出すことがポイントです。次の例を見てみましょう。
def example(n):
if n == 0:
return "終了"
else:
return example(n-1)
この関数は、nが0になるまで自分自身を呼び続け、0になったら「終了」と返します。
4. 再帰関数でよく使う例①:階乗の計算
階乗(かいじょう)とは、1からその数までの整数をすべてかけた値です。例えば、5の階乗は「5×4×3×2×1 = 120」です。
階乗は再帰関数で簡単に計算できます。次のコードを見てみましょう。
def factorial(n):
if n == 0:
return 1 # 0の階乗は1と決まっています
else:
return n * factorial(n - 1)
この関数は、自分自身を呼び出しながら
print(factorial(5)) # 120が出力されます
120
5. 再帰関数でよく使う例②:フィボナッチ数列の計算
フィボナッチ数列は、最初の2つの数は1で、その後は前の2つの数の和になる数列です。例えば、1, 1, 2, 3, 5, 8, 13, ... となります。
再帰関数でフィボナッチ数列のn番目の値を求めるコードは次のようになります。
def fibonacci(n):
if n == 1 or n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
この関数も自分自身を2回呼び出しながら、nが1か2になったら1を返します。
print(fibonacci(7)) # 13が出力されます
13
6. 再帰関数を使うときの注意点
- 終了条件(ベースケース)を必ず作る:ないと永遠に呼び続けてエラーになります。
- 深さに注意する:再帰が深くなりすぎると、プログラムが止まることがあります。
- 計算コストに注意:フィボナッチ数列の再帰は計算が多くなるので、大きな数字には向きません。
大きな数を計算したい場合は別の方法を使うか、工夫が必要です。
7. まとめ(※別記事にて)
ここでは書きませんが、再帰関数は慣れるまで難しい部分もあります。基本の考え方と仕組みを理解して、少しずつ練習してみてください。