再帰は、概念やプロセスの定義が、それ自身のより単純なバージョンや以前のバージョンに依存する場合に発生します。[ 1 ]再帰は、言語学から論理学まで、さまざまな分野で使用されています。再帰の最も一般的な応用は、数学とコンピュータサイエンスで、定義されている関数が自身の定義内で適用されます。これは一見無限の数のインスタンス(関数値)を定義するように見えますが、多くの場合、無限ループや無限の参照チェーンが発生しないように行われます。
再帰性を示すプロセスは再帰的である。ビデオフィードバックは再帰的な画像を表示するが、無限鏡も同様である。

数学やコンピュータサイエンスにおいて、オブジェクトやメソッドのクラスが再帰的な振る舞いを示すとは、それが次の2つの特性によって定義できる場合をいう。
例えば、以下は人の祖先に関する再帰的な定義である。人の祖先は次のいずれかである。
フィボナッチ数列は、再帰のもう一つの典型的な例である。
多くの数学的公理は再帰規則に基づいています。たとえば、ペアノ公理による自然数の形式的な定義は、「ゼロは自然数であり、すべての自然数には後継数があり、それも自然数である」と記述できます。[ 2 ]この基本ケースと再帰規則により、すべての自然数の集合を生成できます。
再帰的に定義されるその他の数学的対象には、階乗、関数(例えば、漸化式)、集合(例えば、カントール三項集合)、フラクタルなどがあります。
再帰には、もっと皮肉を込めた定義がいくつかある。再帰的なユーモアを参照のこと。

再帰とは、手続きのステップの1つが手続き自体を呼び出すことを含む場合に、手続きが経るプロセスのことです。再帰を経る手続きは「再帰的」であると言われます。[ 3 ]
再帰を理解するには、手続きと手続きの実行の違いを認識する必要があります。手続きとは、一連の規則に基づいた一連の手順であり、手続きの実行とは、実際に規則に従って手順を実行することです。
再帰は、ある手続きの仕様内で他の手続きの実行を参照することと関連しているが、同一ではない。
このように手順が定義されると、すぐに無限ループが発生する可能性が生じます。再帰は、手順が完了できるように、特定の場合に問題のステップがスキップされる場合にのみ、定義の中で適切に使用できます。
たとえ適切に定義されていたとしても、再帰的な手続きは人間にとって実行が容易ではありません。なぜなら、手続きの新規呼び出しと、部分的に実行された古い呼び出しを区別する必要があり、そのためには、複数の同時実行された手続きがどの程度進行しているかを管理する必要があるからです。こうした理由から、日常的な場面で再帰的な定義が用いられることは非常に稀です。
言語学者ノーム・チョムスキーをはじめとする多くの人々は、言語における文法的な文の数に上限がないこと、および文法的な文の長さに上限がないこと(1つの文を発話できる時間などの実際的な制約を除く)は、自然言語における再帰の結果であると説明できると主張している。[ 4 ] [ 5 ]
文以外にも再帰的に定義できる構造は数多くあり、そのため文が別のカテゴリのインスタンスを内包する方法も数多く存在する。[ 6 ]長年にわたり、言語全般はこの種の分析に適していることが証明されてきた。
再帰が人間の言語の本質的な特性であるという一般的に受け入れられている考えは、ピラハン語に関するダニエル・エヴェレットの主張に基づいて異議を唱えられてきた。アンドリュー・ネヴィンス、デイヴィッド・ペセツキー、シレーヌ・ロドリゲスなど、これに反論した人は多数いる。[ 7 ]いずれにせよ、文学的な自己言及は、数学的または論理的な再帰とは種類が異なると主張できる。[ 8 ]
再帰は構文だけでなく、自然言語の意味論においても重要な役割を果たします。たとえば、単語andは、文の意味に適用して新しい文を作成できる関数として解釈でき、同様に名詞句の意味、動詞句の意味などにも適用できます。また、自動詞、他動詞、二重他動詞にも適用できます。適切に柔軟で、通常はこれらの異なるタイプの意味のいずれかを引数として受け取ることができるように定義される単一の指示を与えるために、文を組み合わせる単純なケースについて定義し、次にその単純なケースに基づいて他のケースを再帰的に定義することで、これを実現できます。[ 9 ]
再帰文法とは、再帰的な生成規則を含む形式文法のことである。[ 10 ]
コンピュータサイエンス、プログラミング、哲学、数学の教科書では、再帰は時としてユーモラスに用いられる。一般的には、循環定義や自己参照によって、想定される再帰ステップが基本ケースに近づくのではなく、無限後退につながるという形で用いられる。こうした書籍の用語集に、次のようなジョークの項目が含まれていることは珍しくない。
ブライアン・カーニハンとデニス・リッチーの著書『The C Programming Language』 のいくつかの版の索引の269ページに、このジョークのバリエーションが見られます。索引の項目は再帰的に自身を参照しています(「再帰 86、139、141、182、202、269」)。このジョークの初期バージョンは、ローラン・シクロスィー著『Let's talk Lisp』(1975年12月1日、プレンティス・ホールPTR刊、著作権表示1976年)と、カーニハンとプラウガー著『Software Tools』(1976年1月11日、アディソン・ウェスリー・プロフェッショナル刊)に見られます。このジョークは、カーニハンとパイク著『The UNIX Programming Environment』にも掲載されています。 『The C Programming Language』の初版には掲載されていません。このジョークは関数型プログラミングの民間伝承の一部であり、前述の書籍が出版される前から関数型プログラミングコミュニティで広く知られていました。[ 12 ] [ 13 ]

別のジョークとして、「再帰を理解するには、再帰を理解しなければならない」というものがあります。[ 11 ] Googleのウェブ検索エンジンの英語版では、「再帰」を検索すると、「もしかして:再帰」という候補が表示されます。[ 14 ]アンドリュー・プロトキンによる別の表現は次のとおりです。「再帰が何であるかをすでに知っている場合は、その答えを覚えておけばよい。そうでない場合は、ダグラス・ホフスタッターにあなたよりも近い場所に立っている人を見つけて、その人に再帰とは何かを尋ねなさい。」
再帰的な頭字語も、再帰的なユーモアの例です。例えば、PHP は「PHP Hypertext Preprocessor」の略、 WINEは「WINE Is Not an Emulator」の略、RPMは「RPM Package manager」の略、GNU は「GNU's not Unix」の略、SPARQLは「SPARQL Protocol and RDF Query Language」の略です。

再帰的に定義された集合の典型的な例は、自然数である。
数理論理学において、ペアノ公理(またはペアノ公準、デデキント=ペアノ公理)は、19世紀にドイツの数学者リヒャルト・デデキントとイタリアの数学者ジュゼッペ・ペアノによって提示された自然数に関する公理である。ペアノ公理は、再帰的後継関数を参照することによって自然数を定義し、加算と乗算を再帰関数として定義する。
もう一つの興味深い例は、公理系におけるすべての「証明可能な」命題の集合であり、それは次のように帰納的(または再帰的)に定義される証明手順によって定義されます。
有限分割ルールは、フラクタルのような画像を作成するために使用できる幾何学的な再帰の一種です。分割ルールは、有限個のラベルが付けられた多角形の集合から始まり、各多角形は、元の多角形のラベルのみに依存する方法で、より小さなラベル付き多角形に分割されます。このプロセスは繰り返し実行できます。カントール集合を作成するための標準的な「中央三分割」手法は、重心分割と同様に、分割ルールです。
関数は、それ自身を用いて再帰的に定義されることがあります。よく知られた例として、フィボナッチ数列F ( n ) = F ( n -1) + F ( n -2) があります。このような定義が有用であるためには、再帰的に定義されていない値に還元可能でなければなりません。この場合、F (0) = 0 およびF (1) = 1 となります。
前述の節のように、再帰的に定義された集合や関数に、場合分けによる証明という標準的な手法を適用すると、構造的帰納法が得られます。これは、数学的帰納法の強力な一般化であり、数理論理学やコンピュータ科学における証明の導出に広く用いられています。
動的計画法は、複数期間または複数ステップの最適化問題を再帰的な形式で定式化する最適化手法です。動的計画法の重要な成果はベルマン方程式であり、これは最適化問題の以前の時点(または以前のステップ)における値を、後の時点(または後のステップ)における値を用いて表すものです。
集合論において、これは再帰的に定義された関数が存在することを保証する定理である。集合X 、 Xの要素a、および関数f : X → Xが与えられたとき、この定理は一意の関数が存在することを述べている。(どこは、ゼロを含む自然数の集合を表す。
任意の自然数nに対して。
デデキントは集合論的関数の一意定義の問題を最初に提起した。再帰によって、1888 年のエッセイ「Was sind und was sollen die Zahlen?」で議論のスケッチを示しました。[ 15 ]
出典: [ 16 ]
させて。
Sは空ではないので。 させて。 今すべてにおいてさらに、それからすべての人々のためにしかしその後すべての人々のためにとなることによって。 したがってそしてそれはSの最小要素である。
させて。 今以来。 仮定する。 それから一部の人にとってこれによりしたがって数学的帰納法により、。
させて矛盾を導くために、つまり、、 加えて、、 どこ。 それから これは、gがSの最小要素であるという事実と矛盾する。したがって、。
我々は、もしそれからそうでないと仮定すると、となることによって。 以来そしてユニークなと。 それから。 以来、、 に加えて、 どこしかしその後これは、gがSの最小要素であるという事実に矛盾する。数学的帰納法によれば、したがって、グラフが g である関数が存在する。それを F と表記する。
2つの関数を取り上げますそしてすなわち、以下の通りである。
ここで、aはXの要素である。
すべての自然数 nに対してF ( n ) = G ( n )が数学的帰納法によって証明できる。
帰納法により、すべてのnに対してF ( n ) = G ( n )となる。。
問題を単純化する一般的な方法の一つは、問題を同じ種類のサブ問題に分割することです。コンピュータプログラミングの手法としては、これは分割統治法と呼ばれ、多くの重要なアルゴリズムの設計において重要な役割を果たします。分割統治法は、より小さなインスタンスを解くことで問題を解決していく、トップダウン型のアプローチです。これとは対照的なのが動的計画法です。このアプローチは、より大きなインスタンスを解いて目的のサイズに達するまで問題を解決していく、ボトムアップ型のアプローチです。
再帰の典型的な例として、階乗関数の定義が挙げられます。以下にPythonコードで示します。
def factorial ( n ): if n > 0 : return n * factorial ( n - 1 ) else : return 1この関数は、入力のより小さいバージョンに対して再帰的に自身を呼び出し(n - 1)、再帰呼び出しの結果にを掛け、基本ケースnに到達するまでこれを繰り返します。これは、階乗の数学的定義に類似しています。
コンピュータプログラミングにおける再帰は、関数をより単純な、多くの場合より小さなバージョンで定義する場合に典型的に表されます。問題の解決策は、より単純なバージョンから得られた解決策を組み合わせることによって考案されます。再帰の応用例の一つとして、プログラミング言語の構文解析器が挙げられます。再帰の大きな利点は、無限の数の文、デザイン、その他のデータを、有限のコンピュータプログラムで定義、解析、または生成できることです。
漸化式とは、1つ以上の数列を再帰的に定義する方程式のことです。特定の種類の漸化式は「解く」ことで、非再帰的な定義(例えば、閉じた形式の式)を得ることができます。
アルゴリズムに再帰を用いることには、利点と欠点の両方がある。主な利点は、通常、命令が簡潔であることである。主な欠点は、再帰アルゴリズムのメモリ使用量が非常に速く増加する可能性があり、大規模なインスタンスには実用的でない可能性があることである。
植物や動物には、大きな部分が2つ以上の似たような小さな部分に枝分かれする分岐構造のように、再帰的なプロセスによって作られたと思われる形状が現れることがある。その一例がロマネスコブロッコリーである。[ 17 ]
経営科学では、再帰とは、大規模な事業体における抽象化レベルを反復するプロセスを指す場合がある。 [ 18 ]一般的な例としては、中間管理職を 経てライン管理職から上級管理職に至る管理階層の再帰的な性質が挙げられる。また、企業統治における資本構成というより大きな問題も含まれる。[ 19 ]


マトリョーシカ人形は、再帰的概念の物理的な芸術的例である。[ 20 ]
再帰は、1320 年に制作されたジョットのステファネスキ三連祭壇画以来、絵画で使用されています。その中央パネルには、ひざまずいて三連祭壇画自体を捧げ物として掲げるステファネスキ枢機卿の姿が描かれています。[ 21 ] [ 22 ]この手法は、より一般的にはドロステ効果として知られており、ミーズ・アン・アビーム技法の例です。
M.C.エッシャーの版画ギャラリー(1956年)は、歪んだ都市を描いた版画で、その中にギャラリーがあり、そのギャラリーの中に絵が再帰的に含まれており、無限に続く。[ 23 ]
映画『インセプション』は、名詞に接尾辞「-ception 」を付けて、何かの再帰を冗談めかして示すことを口語的に表現するようになった。 [ 24 ]
再帰のその他の例: ロシアのマトリョーシカ人形。各人形は無垢の木製であるか、中が空洞で、中に別のマトリョーシカ人形が入っています。