Python における再帰関数

PythonBeginner
オンラインで実践に進む

はじめに

魔法と数学的構築物の高度な使用で知られる偉大な帝国、ピソネシアの神話の世界へようこそ。帝国の最も大切な神器、再帰水晶の守備を任されたあなたは、帝国の頭の王家衛兵です。伝説によると、それは自身の中でループする古代コードを使って作られ、無限のエネルギー源を生み出すものだとされています。この神器をより良く理解し保護するために、あなたは Python における再帰の技術、つまりそれを作るのに使われた技術を習得しなければなりません。

あなたの目標は、再帰の力を駆使して、従来の手段では簡単に解くことができない複雑な問題を解くことです。そうすることで、悪用を企む者たちから帝国の富と知識を守ります。再帰関数の謎を解き明かし、時とコードの旅に出る準備をしてください。

再帰の理解

このステップでは、再帰の基本概念と Python での実装方法を学びます。再帰関数とは、問題を解くために自分自身を呼び出す関数です。再帰関数を設計するキーは、再帰を停止する条件であるベースケースと、関数が自分自身を呼び出す再帰ケースを持つことを確認することです。

まずは、数の階乗を計算する簡単な再帰関数を作成してみましょう。数 n の階乗とは、n 以下のすべての正の整数の積です。

好きなテキストエディタで ~/project/factorial.py を開き、次のコードを追加します。

def factorial(n):
    if n == 0:  ## ベースケース
        return 1
    else:        ## 再帰ケース
        return n * factorial(n - 1)

## 例の使用法
print(factorial(5))

コードを実行するには、次のコマンドを使用します。

python3 factorial.py

期待される結果は 120 であるはずです。なぜなら、5! = 5 * 4 * 3 * 2 * 1 = 120 だからです。

複数のベースケースを持つ再帰

次に、複数のベースケースを持つ再帰関数を構築する方法を学びます。fibonacci.py という名前のファイルに fibonacci 関数を作成しましょう。この関数は、n 番目の数までのフィボナッチ数列を計算します。フィボナッチ数列とは、0 と 1 から始まり、各数が前の 2 つの数の和である数列です。

~/project/fibonacci.py に次のコードを入力します。

def fibonacci(n):
    if n == 0:  ## 最初のベースケース
        return 0
    elif n == 1:  ## 2 番目のベースケース
        return 1
    else:         ## 再帰ケース
        return fibonacci(n - 1) + fibonacci(n - 2)

## 例の使用法
print(fibonacci(10))

次のコマンドでコードを実行します。

python3 fibonacci.py

期待される出力は 55 であるはずです。なぜなら、それはフィボナッチ数列の 10 番目の数だからです。

まとめ

この実験では、Python における再帰の概念を 2 つの異なる数学的数列に適用することで深く掘り下げました。設計の思考過程は、再帰の学習を面白く関連性のあるものにする魅力的な物語を作り出すことを中心に展開されました。課題は、階乗の単純な単一のベースケースから、フィボナッチ数列の複数のベースケースを持つやや複雑なシナリオまで段階的に構築され、包括的な理解を確保するためになされました。

実験が終了するまでに、あなたは再帰関数を書くことに熟練するだけでなく、ベースケースの重要性と再帰呼び出しの背後にある仕組みも理解するようになりました。あなたは今、再帰アルゴリズムを利用して現実世界の問題を解く鍵を手にしています。これは、ピソネシアの神話的な再帰水晶自体と同じくらい価値のあるスキルです。