フリーキーズ | 独学プログラミング

再帰的プログラムとは

最終更新日

再帰的プログラム、より具体的には再帰的関数は、同じ問題のより小さなインスタンスで自分自身を呼び出すことによって問題を解決するプログラムです。つまり、この関数は、問題をより小さな、より管理しやすいサブ問題に分解し、そのサブ問題のそれぞれを解決するために自分自身を呼び出すことによって、タスクを実行します。再帰的関数は、より小さな類似の問題に自然に分割できる問題を解決するための、エレガントで簡潔な方法を提供することが多いです。

再帰的プログラムの主な特徴

1. 基本ケース

再帰的な関数には、1つ以上の基本ケースが必要です。基本ケースとは、これ以上再帰的な処理を行わずに直接解くことができる、問題の最も単純な例です。基本ケースは、再帰の停止点として機能し、関数が最終的に終了することを保証します。

2. 再帰的ケース

再帰的な関数は、1つ以上の再帰的なケースを持つ必要があります。このケースは、関数が問題の小さなインスタンスで自分自身を呼び出します。これらの小さなインスタンスは、最終的にベースケースに到達し、問題全体を解決できます。

再帰的な関数やアルゴリズムの例

1. 階乗

階乗関数(n!と表記)は、再帰的な関数の一般的な例です。非負整数nの階乗は、n以下のすべての正の整数の積です。階乗関数の再帰的定義は以下のようになります。

  • 基本的な場合: 0! = 1
  • 再帰的な場合: n!=n * (n-1)

Pythonのようなプログラミング言語では、階乗関数を次のように再帰的に実装できます。

def factorial(n):
    if n == 0return 1
    elsereturn n * factorial(n-1)

2. フィボナッチ数列

フィボナッチ数列も再帰を使って解くことができる問題の例であり、この数列は次のように定義されています。

  • 基本ケース:f(0) = 0, f(1) = 1
  • 再帰的な場合:F(n) = F(n-1) + F(n-2) for n > 1

Pythonでフィボナッチ数列を再帰的に実装すると、次のようになります。

def fibonacci(n):
    if n == 0return 0
    elif n == 1return 1
    elsereturn fibonacci(n-1) + fibonacci(n-2)

まとめ

要約すると、再帰的なプログラムまたは関数は、同じ問題のより小さなインスタンスで自分自身を呼び出すことによって問題を解決するコードの一部です。再帰的な関数は、自然に小さな類似の問題に分けることができる問題を解決するためのエレガントで簡潔な方法を提供することがよくあります。再帰的関数の例としては、階乗関数やフィボナッチ数列があります。