Python 再帰関数のすべてを 1 つの記事で説明
再帰処理は一般的なプログラミングのテクニックで、Pythonでも再帰関数という形で実装できます。再帰関数とは、関数の定義の中でその関数自身を呼び出すことです。これにより、同じ処理を繰り返し実行する必要のある問題を解決できます。
まず簡単な例として、数の階乗の計算を見てみましょう。階乗とは1からその数までの連続する整数の積のことです。例えば、5の階乗は5×4×3×2×1=120となります。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
result = factorial(5)
print(result)
このコードでは、factorialという再帰的な関数を定義しています.引数にnを受け取り、これは階乗を計算したい数を表します.最初に、nが0かどうかを調べます.0の場合、0の階乗は1と定義されるため1を返します.そうでなければ、nをfactorial(n-1)(これはn-1の階乗)で掛けた値を返します.このように、再帰によって階乗を段階的に計算し、nが0になるまで続けます.
上記コードを実行すると、120 という結果が得られます。
階乗を計算する以外にも、再帰関数はフィボナッチ数列のような他の問題を解決するためにも利用できる。フィボナッチ数列とは、各数がその前の2つの数の和になる数列のこと。例えば、0、1、1、2、3、5、8、13、21、34など。
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
result = fibonacci(6)
print(result)
上記のコードでは、fibonacciという再帰関数を定義しています。これは、n番目のフィボナッチ数を求めるためにnという引数を受け付けます。まず、nが1以下の場合、nを返します。それ以外の場合は、fibonacci(n-1)とfibonacci(n-2)を足した値、つまり前の2つの値の和を返します。このように、再帰的にフィボナッチ数列を計算し続け、nが1以下になるまで続けます。
コードを実行すると、結果として8を得られます。
再帰関数を記述する際には、再帰の終了条件を必ず設けておく必要があります。そうでないと、関数が無限再帰し、プログラムがクラッシュすることがあります。また、再帰関数の効率は低いです。なぜなら、関数を呼び出すたびに、再帰が終了するまで現在の状態が保存され、その後一度に結果が返されるからです。大規模な問題を処理するときに、スタックオーバーフローが発生する可能性があります。
再帰関数を使うことで、同じ処理を繰り返す問題をスマートかつ簡単に解決できます。ただし、使用時は再帰の終了条件と効率に注意することが必要です。この記事を通して、Python の再帰関数に対する理解を深めていただければ幸いです。