Pythonの再帰

再帰とは何ですか?再帰は、それ自体の観点から何かを定義するプロセスです。

物理的な世界の例は、互いに対向する二つの平行ミラーを配置することです。 それらの間にあるオブジェクトは再帰的に反映されます。

Pythonの再帰関数

Pythonでは、関数が他の関数を呼び出すことができることを知っています。 関数が自分自身を呼び出すことさえ可能です。 これらのタイプの構造は再帰関数と呼ばれます。次の画像は、recurseという再帰関数の動作を示しています。P>

Pythonの再帰関数
Pythonの再帰関数

以下は、整数の階乗を見つけるための再帰関数の例です。数の階乗は、1からその数までのすべての整数の積です。

数の階乗は、1からその数までのすべての整数の積です。

例えば、6の階乗(6と表記されます!)は1*2*3*4*5*6 = 720.

再帰関数の例

def factorial(x): """This is a recursive function to find the factorial of an integer""" if x == 1: return 1 else: return (x * factorial(x-1))num = 3print("The factorial of", num, "is", factorial(num))

出力

The factorial of 3 is 6

上記の例では、factorial()は再帰関数です。p>

この関数を正の整数で呼び出すと、数を減らすことによって再帰的に呼び出します。

各関数は、1に等しくなるまで、その下の数の階乗で数を乗算します。 この再帰呼び出しは、次の手順で説明できます。

factorial(3) # 1st call with 33 * factorial(2) # 2nd call with 23 * 2 * factorial(1) # 3rd call with 13 * 2 * 1 # return from 3rd call as number=13 * 2 # return from 2nd call6 # return from 1st call

何が起こっているかのステップバイステップのプロセスを示す画像を見てみましょう:

再帰的な方法による階乗
再帰的な階乗関数の働き

数が1に減少すると再帰が終了します。 これは基本条件と呼ばれます。

すべての再帰関数は、再帰を停止する基本条件を持たなければならず、そうでなければ関数自体が無限に呼び出されます。

Pythonインタプリタは、無限の再帰を避けるために再帰の深さを制限し、スタックオーバーフローを引き起こします。

デフォルトでは、再帰の最大深度は1000です。 制限を超えると、RecursionErrorになります。 そのような条件の1つを見てみましょう。

def recursor(): recursor()recursor()

出力

Traceback (most recent call last): File "<string>", line 3, in <module> File "<string>", line 2, in a File "<string>", line 2, in a File "<string>", line 2, in a RecursionError: maximum recursion depth exceeded

再帰の利点

  1. 再帰関数は、コードがきれいでエレガントに見えるようにします。
  2. 複雑なタスクは、再帰を使用してより単純なサブ問題に分解することができます。
  3. シーケンスの生成は、ネストされた反復を使用するよりも再帰で簡単です。

再帰の欠点

  1. 再帰の背後にあるロジックがフォロースルーするのが難しいことがあります。
  2. 再帰呼び出しは、多くのメモリと時間を消費するため、高価です(非効率的です)。
  3. 再帰関数はデバッグが困難です。

Related Posts

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です