再帰 さいき (さいき、英 えい : Recursion, Recursive )とは、ある物事 ものごと について記述 きじゅつ する際 さい に、記述 きじゅつ しているもの自体 じたい への参照 さんしょう が[ 注釈 ちゅうしゃく 1] 、その記述 きじゅつ 中 ちゅう にあらわれることをいう。
再帰 さいき は言語 げんご 学 がく から論理 ろんり 学 がく に至 いた る様々 さまざま な分野 ぶんや で使用 しよう されている。最 もっと も一般 いっぱん 的 てき な適用 てきよう は数学 すうがく と計算 けいさん 機 き 科学 かがく で、定義 ていぎ されている関数 かんすう がそれ自身 じしん の定義 ていぎ の中 なか で参照 さんしょう 利用 りよう されている場合 ばあい を言 い う。
合 あ わせ鏡 きょう の間 あいだ で撮影 さつえい すると鏡 かがみ 像 ぞう が無限 むげん に映 うつ る。
平行 へいこう な合 あ わせ鏡 きょう の間 あいだ に物体 ぶったい を置 お くと、その像 ぞう が鏡 かがみ の中 なか に無限 むげん に映 うつ し出 だ される。このように、あるものが部分 ぶぶん 的 てき にそれ自身 じしん で構成 こうせい されていたり、それ自身 じしん によって定義 ていぎ されている時 とき に、それを「再帰 さいき 的 てき (Recursive)」だという[ 1] [ 2] 。論理 ろんり 的 てき 思考 しこう の重要 じゅうよう な特質 とくしつ のひとつであり、数学 すうがく では漸 やや 化 か 式 しき や数学 すうがく 的 てき 帰納 きのう 法 ほう が再帰 さいき 的 てき 構造 こうぞう を持 も っている[ 1] 。計算 けいさん 機 き 科学 かがく だと、オブジェクト やメソッド のクラス が、以下 いか 2つの項目 こうもく で定義 ていぎ できる場合 ばあい に再帰 さいき 的 てき 構造 こうぞう だと言 い える。
単純 たんじゅん な基底 きてい 段階 だんかい (base case ) - 答 こた えを出 だ すのに再帰 さいき を使 つか わない、論理 ろんり 展開 てんかい の終着 しゅうちゃく 点 てん 。基底 きてい は複数 ふくすう あっても構 かま わない。
再帰 さいき 段階 だんかい (recursive step ) - 後続 こうぞく のあらゆる事例 じれい を基底 きてい 段階 だんかい に帰着 きちゃく させる一連 いちれん の法則 ほうそく 。
例 たと えば、これは人間 にんげん の祖先 そせん の再帰 さいき 的 てき 定義 ていぎ である。ある人物 じんぶつ の祖先 そせん は次 つぎ のいずれかになる。
その人物 じんぶつ の親 おや (基底 きてい 段階 だんかい )、または
その人物 じんぶつ の親 おや の祖先 そせん (再帰 さいき 段階 だんかい )。
フィボナッチ数列 すうれつ は、再帰 さいき を用 もち いた古典 こてん 的 てき な数式 すうしき 例 れい である。
基底 きてい 1として
F
i
b
(
0
)
=
0
{\displaystyle Fib(0)=0}
,
基底 きてい 2として
F
i
b
(
1
)
=
1
{\displaystyle Fib(1)=1}
,
n
>
1
{\displaystyle n>1}
のあらゆる整数 せいすう について
F
i
b
(
n
)
=
F
i
b
(
n
−
1
)
+
F
i
b
(
n
−
2
)
{\displaystyle Fib(n)=Fib(n-1)+Fib(n-2)}
.
多 おお くの数学 すうがく 的 てき 公理 こうり は、再帰 さいき を用 もち いた法則 ほうそく に基 もと づいている。例 たと えば、ペアノの公理 こうり による自然 しぜん 数 すう の正式 せいしき な定義 ていぎ は「ゼロは自然 しぜん 数 すう であり、各 かく 自然 しぜん 数 すう には後続 こうぞく 数 すう があり、これも自然 しぜん 数 すう である」と記述 きじゅつ されうる[ 3] 。この基底 きてい 段階 だんかい および再帰 さいき を用 もち いた法則 ほうそく によって、全 すべ ての自然 しぜん 数 すう の集合 しゅうごう を生成 せいせい できる。
他 ほか にも再帰 さいき を用 もち いて定義 ていぎ されている数学 すうがく 的 てき 対象 たいしょう としては、関数 かんすう の漸 やや 化 か 式 しき 、集合 しゅうごう のカントール集合 しゅうごう 、フラクタル 分野 ぶんや 、プログラミング言語 げんご における階 かい 乗 じょう 、などがある。
言語 げんご 学者 がくしゃ ノーム・チョムスキー らは、言語 げんご において適格 てきかく 文 ぶん の数 かず に上限 じょうげん がなく、適格 てきかく 文 ぶん の長 なが さにも上限 じょうげん がないことは、自然 しぜん 言語 げんご での再帰 さいき の結果 けっか として説明 せつめい 可能 かのう だと論 ろん じている[ 4] [ 5] 。
これは、文章 ぶんしょう など統語 とうご 範疇 はんちゅう での再帰 さいき 的 てき 定義 ていぎ という観点 かんてん から理解 りかい 可能 かのう である。文章 ぶんしょう では、動詞 どうし の補語 ほご などが別 べつ の文章 ぶんしょう という構造 こうぞう を持 も つことができる。「ドロシーは魔女 まじょ が危険 きけん だと考 かんが えている」には「魔女 まじょ は危険 きけん だ」の一文 いちぶん がより大 おお きな文章 ぶんしょう に含 ふく まれている。それゆえ文章 ぶんしょう とは、名詞 めいし 句 く と動詞 どうし に別 べつ の文章 ぶんしょう を含 ふく みうる構造 こうぞう を持 も つものだと、再帰 さいき 的 てき に(非常 ひじょう に大 おお まかだが)定義 ていぎ することができる。
これは、文章 ぶんしょう が任意 にんい の長 なが さになり得 え ることも意味 いみ する。例 たと えば、英語 えいご だと関係 かんけい 代名詞 だいめいし の"that"を使 つか うことによって、
"Dorothy thinks that Toto suspects that Tin Man said that..."
と再帰 さいき 的 てき に文 ぶん を継 つ ぎ足 た すことが可能 かのう である。再帰 さいき 的 てき に定義 ていぎ できうる文章 ぶんしょう の他 ほか にも多 おお くの構造 こうぞう があり、別 べつ の品詞 ひんし に文章 ぶんしょう を組 く み込 こ む方法 ほうほう も沢山 たくさん ある(例 たと えば修飾 しゅうしょく 語 ご を文章 ぶんしょう 形式 けいしき にする)。長 なが い歳月 さいげつ を経 へ て、言語 げんご には一般 いっぱん 的 てき にこの種 たね の分析 ぶんせき で順応 じゅんのう 性 せい があることが証明 しょうめい されている[ 6] 。
しかし近年 きんねん 、再帰 さいき が人類 じんるい の言語 げんご の本来 ほんらい 的 てき な性質 せいしつ であるという一般 いっぱん 的 てき に受 う け入 い れられている思想 しそう は、ダニエル・L・エヴェレット によって彼 かれ のピダハン語 ご 研究 けんきゅう に基 もと づく反論 はんろん が行 おこな われている。アンドリュー・ネヴィンズ、デイヴィッド・ペセツキー、シリーン・ロドリゲスがこれに反対 はんたい する識者 しきしゃ 達 たち である[ 7] 。いずれの場合 ばあい でも、文学 ぶんがく 的 てき な自己 じこ 言及 げんきゅう は数学 すうがく 的 てき ・論理 ろんり 的 てき な再帰 さいき とは種類 しゅるい が異 こと なると論 ろん じられている[ 8] 。
再帰 さいき は、構文 こうぶん だけでなく自然 しぜん 言語 げんご の意味 いみ 論 ろん においても重要 じゅうよう な役割 やくわり を果 は たしている。例 たと えば接続詞 せつぞくし "and"は、文意 ぶんい に沿 そ った新 あたら しい文章 ぶんしょう を付加 ふか できる機能 きのう だと解釈 かいしゃく することが可能 かのう で、名詞 めいし 句 く や動詞 どうし 句 く などに適用 てきよう できる。これは、文 ぶん を繋 つな げる単純 たんじゅん な場合 ばあい について定義 ていぎ したもので、他 た の接続詞 せつぞくし は同様 どうよう の観点 かんてん から再帰 さいき 的 てき に定義 ていぎ することができる[ 9] 。
再帰 さいき 的 てき なウィキペディアのページ。
たまに再帰 さいき は、計算 けいさん 機 き 科学 かがく ・プログラミング等 とう の書物 しょもつ で、ジョークとして掲載 けいさい される場合 ばあい がある。そうした本 ほん では概 がい して循環 じゅんかん 定義 ていぎ や自己 じこ 参照 さんしょう が付 ふ されており、次 つぎ のような馬鹿 ばか らしい項目 こうもく が用語 ようご 集 しゅう として載 の っていることも珍 めずら しくない。
再帰 さいき については「再帰 さいき 」を参照 さんしょう のこと[ 10] 。
これは想定 そうてい した再帰 さいき 段階 だんかい が基底 きてい 段階 だんかい へと帰着 きちゃく することなく、無限 むげん 後退 こうたい を引 ひ き起 お こすという(プログラミング失敗 しっぱい 例 れい の)洒落 しゃれ である。この手 て の最初 さいしょ のジョークは1975-76年 ねん に出版 しゅっぱん されたプログラム言語 げんご の教本 きょうほん 『Let's talk Lisp 』と『in Software Tools』に見 み られる。これは関数 かんすう 型 がた プログラミング を伝授 でんじゅ する一環 いっかん としての洒落 しゃれ で、上 うえ の書籍 しょせき が出版 しゅっぱん される前 まえ に(米国 べいこく の)プログラミング関連 かんれん コミュニティで既 すで に広 ひろ まっていた。
もう一 ひと つの冗談 じょうだん が「再帰 さいき を理解 りかい するには、再帰 さいき を理解 りかい する必要 ひつよう がある」[ 10] というものである。英語 えいご 版 ばん Googleウェブ検索 けんさく エンジンで"recursion"を検索 けんさく すると、同 どう サイトでは一番 いちばん 上 じょう に"Did you mean: recursion(再帰 さいき って意味 いみ だったかな)"と赤 しゃっ く表示 ひょうじ される[ 11] [ 注釈 ちゅうしゃく 2] 。
再帰 さいき 的 てき 頭字 かしらじ 語 ご は、再帰 さいき を含 ふく んだ洒落 しゃれ の例 れい である。例 たと えば、PHP (プログラミング言語 げんご ) は"PHP Hypertext Preprocessor"の略 りゃく で、WINE は"WINE Is Not an Emulator"、GNU は"GNU's not Unix"を表 あらわ す。
シェルピンスキーのギャスケット -フラクタル を形成 けいせい する三角形 さんかっけい の再帰 さいき
日本 にっぽん 国内 こくない の数学 すうがく では、"Recursion"や"Recursive"に対 たい して再帰 さいき の代 か わりに「帰納 きのう 」の訳語 やくご をあてた数学 すうがく 用語 ようご も幾 いく つか存在 そんざい する(帰納的 きのうてき 可算 かさん 集合 しゅうごう 、帰納 きのう 言語 げんご 、帰納的 きのうてき 関数 かんすう など)。これは下 した にある「自然 しぜん 数 すう の再帰 さいき 的 てき 定義 ていぎ の例 れい 」でも分 わ かるように、数学 すうがく における再帰 さいき には数学 すうがく 的 てき 帰納 きのう 法 ほう と原理 げんり 的 てき な共通 きょうつう 性 せい があるためである。
再帰 さいき 的 てき に定義 ていぎ された集合 しゅうごう の標準 ひょうじゅん 例 れい が、自然 しぜん 数 すう である。
0 は
N
{\displaystyle \mathbb {N} }
に含 ふく まれる。
仮 かり にn が
N
{\displaystyle \mathbb {N} }
に含 ふく まれるなら、n +1は
N
{\displaystyle \mathbb {N} }
に含 ふく まれる。
自然 しぜん 数 すう の集合 しゅうごう
N
{\displaystyle \mathbb {N} }
とは、上記 じょうき 2つの性質 せいしつ を満 み たす最小 さいしょう の集合 しゅうごう である[ 注釈 ちゅうしゃく 3] 。
数理 すうり 論理 ろんり 学 がく において、ペアノの公理 こうり とはドイツの数学 すうがく 者 しゃ リヒャルト・デーデキント とイタリアの数学 すうがく 者 しゃ ジュゼッペ・ペアノ によって19世紀 せいき に提示 ていじ された自然 しぜん 数 すう の公理 こうり である。ペアノの公理 こうり は、再帰 さいき 的 てき な後者 こうしゃ 関数 かんすう と再帰 さいき 関数 かんすう としての加算 かさん ・乗算 じょうざん を参照 さんしょう して自然 しぜん 数 すう を定義 ていぎ している。
もう1つの例 れい は、以下 いか のように帰納 きのう または再帰 さいき を用 もち いて定義 ていぎ される証明 しょうめい 手続 てつづ き (Proof procedure ) の観点 かんてん から定義 ていぎ される公理 こうり 体系 たいけい 内 うち のあらゆる「証明 しょうめい 可能 かのう な」命題 めいだい の集合 しゅうごう である。
ある命題 めいだい が公理 こうり であるならば、それは証明 しょうめい 可能 かのう な命題 めいだい である。
ある命題 めいだい が推論 すいろん 規則 きそく によって真 しん に到達 とうたつ 可能 かのう な命題 めいだい から導出 どうしゅつ できるなら、それは証明 しょうめい 可能 かのう な命題 めいだい である。
証明 しょうめい 可能 かのう な命題 めいだい の集合 しゅうごう は、これらの条件 じょうけん を満 み たす命題 めいだい の最小 さいしょう の集合 しゅうごう である。
有限 ゆうげん 分割 ぶんかつ 規則 きそく は再帰 さいき の幾何 きか 学 がく 的 てき 形式 けいしき で、これはフラクタル模様 もよう を作図 さくず するのに使用 しよう される。分割 ぶんかつ 規則 きそく は、有限 ゆうげん に多 おお くのラベル でラベル付 らべるつ けされた多角 たかく 形 がた の集 あつ まりを起点 きてん として、各 かく 多角 たかく 形 がた は最初 さいしょ の多角 たかく 形 がた ラベルにのみ依存 いぞん する方法 ほうほう で、より小 ちい さなラベル付 つ き多角 たかく 形 がた に分割 ぶんかつ される。この工程 こうてい は繰 く り返 かえ し行 おこな うことができる。カントール集合 しゅうごう を作 つく るための標準 ひょうじゅん 的 てき な「3等分 とうぶん の中央 ちゅうおう 部 ぶ を除去 じょきょ する」技法 ぎほう が、分割 ぶんかつ 規則 きそく の例 れい である。
関数 かんすう は自身 じしん を再帰 さいき 的 てき に定義 ていぎ する場合 ばあい がある。とりわけ漸 すすむ 化 か 式 しき が数列 すうれつ を再帰 さいき 的 てき に定 さだ める数式 すうしき であり、その身近 みぢか な例 れい が
F
(
n
)
=
F
(
n
−
1
)
+
F
(
n
−
2
)
{\displaystyle F(n)=F(n-1)+F(n-2)}
というフィボナッチ数列 すうれつ である。こうした漸 すすむ 化 か 式 しき による定義 ていぎ が成立 せいりつ する場合 ばあい 、その数式 すうしき は再帰 さいき を用 もち いずに定義 ていぎ された基底 きてい 値 ち (フィボナッチの場合 ばあい
F
(
0
)
=
0
{\displaystyle F(0)=0}
と
F
(
1
)
=
1
{\displaystyle F(1)=1}
)に帰着 きちゃく できる必要 ひつよう がある。また、漸 やや 化 か 式 しき の再帰 さいき 関係 かんけい を解 と いた場合 ばあい は非 ひ 再帰 さいき 的 てき な定義 ていぎ (一般 いっぱん 項 こう )を得 え ることが可能 かのう である[ 注釈 ちゅうしゃく 4] 。
有名 ゆうめい な再帰 さいき 関数 かんすう にアッカーマン関数 かんすう があるが、これは原始 げんし 再帰 さいき 関数 かんすう よりも早 はや く増大 ぞうだい して巨 きょ 大数 たいすう を生 う み出 だ すため、再帰 さいき を使 つか わずに一般 いっぱん 項 こう を簡単 かんたん な式 しき で表 あらわ すことが出来 でき ない[ 13] 点 てん がフィボナッチ数列 すうれつ とは異 こと なる。
前節 ぜんせつ のような、再帰 さいき 的 てき 定義 ていぎ がされた集合 しゅうごう や関数 かんすう に対 たい して複数 ふくすう 場合 ばあい 分 わ けによる証明 しょうめい の標準 ひょうじゅん 的 てき な手法 しゅほう を適用 てきよう すると、構造 こうぞう 的 てき 帰納 きのう 法 ほう が得 え られる。これは数理 すうり 論 ろん 理学 りがく とコンピュータサイエンスで証明 しょうめい を導出 どうしゅつ するのに広 ひろ く使用 しよう されている数学 すうがく 的 てき 帰納 きのう 法 ほう の強力 きょうりょく な一般 いっぱん 化 か である。
動的 どうてき 計画 けいかく 法 ほう は、多 た 周期 しゅうき ないし多 た 段階 だんかい の最適 さいてき 化 か 問題 もんだい を再帰 さいき 形式 けいしき で再 さい 記述 きじゅつ する数理 すうり 最適 さいてき 化 か へのアプローチ手法 しゅほう である。動的 どうてき 計画 けいかく 法 ほう の主 おも な成果 せいか がベルマン方程式 ほうていしき で、これは最適 さいてき 化 か 問題 もんだい の直近 ちょっきん 時 じ (直近 ちょっきん 段階 だんかい )での値 ね を、その次回 じかい 時刻 じこく (次段 じだん 階 かい )における値 ね の観点 かんてん から記述 きじゅつ するものである。
集合 しゅうごう 論 ろん において、これは再帰 さいき 的 てき 定義 ていぎ がなされた関数 かんすう が存在 そんざい することを保証 ほしょう する定理 ていり である。集合 しゅうごう X と、X の要素 ようそ a と、関数 かんすう f : X → X が与 あた えられた場合 ばあい に、任意 にんい の自然 しぜん 数 すう n について
F
(
0
)
=
a
{\displaystyle F(0)=a}
F
(
n
+
1
)
=
f
(
F
(
n
)
)
{\displaystyle F(n+1)=f(F(n))}
となるような一意 いちい な関数 かんすう
F
:
N
→
X
{\displaystyle F:\mathbb {N} \to X}
(where
N
{\displaystyle \mathbb {N} }
が存在 そんざい する、と同 どう 定理 ていり は述 の べている(ここでの
N
{\displaystyle \mathbb {N} }
は、ゼロを含 ふく む自然 しぜん 数 すう の集合 しゅうごう を示 しめ す)。
2つの関数 かんすう
F
:
N
→
X
{\displaystyle F:\mathbb {N} \to X}
と
G
:
N
→
X
{\displaystyle G:\mathbb {N} \to X}
を採 と ると:
F
(
0
)
=
a
{\displaystyle F(0)=a}
G
(
0
)
=
a
{\displaystyle G(0)=a}
F
(
n
+
1
)
=
f
(
F
(
n
)
)
{\displaystyle F(n+1)=f(F(n))}
G
(
n
+
1
)
=
f
(
G
(
n
)
)
{\displaystyle G(n+1)=f(G(n))}
ここでa はX の要素 ようそ である。
すべての自然 しぜん 数 すう n についてF (n ) = G (n ) であることは数学 すうがく 的 てき 帰納 きのう 法 ほう によって証明 しょうめい できる。
基底 きてい 段階 だんかい : F (0) = a = G (0) だからn = 0 に対 たい して等式 とうしき が成 な り立 た つ。
帰納 きのう 段階 だんかい : ある
k
∈
N
{\displaystyle k\in \mathbb {N} }
. についてF (k ) = G (k ) と仮定 かてい すると、F (k + 1) = f (F (k )) = f (G (k )) = G (k + 1) である。
したがってF (k ) = G (k ) は F (k + 1) = G (k + 1) を含 ふく んでいる。
帰納 きのう 法 ほう により、全 すべ ての
n
∈
N
{\displaystyle n\in \mathbb {N} }
についてF (n ) = G (n ) である。
単純 たんじゅん 化 か の一般 いっぱん 的 てき な方法 ほうほう は、問題 もんだい を同 おな じ種類 しゅるい の小 しょう 問 とい に分割 ぶんかつ することである。コンピュータプログラミングの技法 ぎほう としてこれは分割 ぶんかつ 統治 とうち 法 ほう と呼 よ ばれ、多 おお くの重要 じゅうよう なアルゴリズム設計 せっけい の鍵 かぎ となる。分割 ぶんかつ 統治 とうち 法 ほう は、問題 もんだい 解決 かいけつ へのトップダウン型 がた アプローチとして機能 きのう し、そこでは問題 もんだい がより小 ちい さなインスタンス を解決 かいけつ することにより解決 かいけつ される。反対 はんたい のアプローチ手法 しゅほう は動的 どうてき 計画 けいかく 法 ほう である。こちらはボトムアップ型 がた アプローチとして機能 きのう し、目的 もくてき の規模 きぼ に達 たっ するまでより大 おお きなインスタンスを解決 かいけつ することによって問題 もんだい が解決 かいけつ される。
プログラミングの観点 かんてん では、nを表現 ひょうげん するのにn-1という参照 さんしょう を持 も ち出 だ してくるものを「再帰 さいき 」という。再帰 さいき の古典 こてん 的 てき な例 れい としては、C言語 げんご で与 あた えられた階 かい 乗 じょう 関数 かんすう の定義 ていぎ がある。
/* 階 かい 乗 じょう n! の計算 けいさん */
int fact ( int n ) {
if ( n == 0 ) return 1 ; /* 基底 きてい 段階 だんかい 。(n = 0) の場合 ばあい : 1*/
else return fact ( n - 1 ) * n ; /* 再帰 さいき 的 てき な構造 こうぞう 。(n > 0) の場合 ばあい : n * (n - 1)!。再帰 さいき 呼出 よびだ し */
}
この関数 かんすう では、掛 か け算 ざん のため入力 にゅうりょく 自身 じしん より小 ちい さな(n-1)という参照 さんしょう を再帰 さいき 的 てき に呼 よ び出 だ し、再帰 さいき 呼 よ び出 だ しの結果 けっか にnを掛 か ける処理 しょり を、階 かい 乗 じょう の数学 すうがく 的 てき 定義 ていぎ と同 おな じく基底 きてい 段階 だんかい の値 ね に達 たっ するまで実行 じっこう する。
アルゴリズム における再帰 さいき の使用 しよう には、長所 ちょうしょ も短所 たんしょ もある。主 おも な長所 ちょうしょ は、一般 いっぱん に命令 めいれい の単純 たんじゅん さである。主 おも な短所 たんしょ は、自身 じしん を呼 よ び出 だ す手法 しゅほう なので引数 ひきすう が再帰 さいき 終了 しゅうりょう 条件 じょうけん を満 み たさない状況 じょうきょう を避 さ けるよう値 ち の変化 へんか に注意 ちゅうい する必要 ひつよう があること。また、再帰 さいき アルゴリズムのメモリ使用 しよう 量 りょう が著 いちじる しく激増 げきぞう して負荷 ふか ががかかるため、大 だい 規模 きぼ なインスタンスを扱 あつか うには非 ひ 実用 じつよう 的 てき な点 てん である。
手続 てつづ きや関数 かんすう といった概念 がいねん をもつプログラミング言語 げんご では、ある手続 てつづ き中 ちゅう で再 ふたた びその手続 てつづ き自身 じしん を呼 よ び出 だ すことを認 みと める場合 ばあい が多 おお い。これを再帰 さいき 呼出 よびだ しといい、階 かい 乗 じょう 計算 けいさん やフィボナッチ数列 すうれつ のように、本来 ほんらい 再帰 さいき 的 てき な構造 こうぞう をもつアルゴリズム(再帰 さいき 的 てき アルゴリズム)を記述 きじゅつ するのに適 てき している。
複数 ふくすう の手続 てつづ き/関数 かんすう が互 たが いに相手 あいて を呼 よ ぶ場合 ばあい も、広 ひろ い意味 いみ での再帰 さいき 呼出 よびだ し(相互 そうご 再帰 さいき )である。C言語 げんご での例 れい :
void a () {
b ();
}
void b () {
a ();
}
処理 しょり を中断 ちゅうだん ・終了 しゅうりょう する基底 きてい 条件 じょうけん が必 かなら ず1つは必要 ひつよう で、その部分 ぶぶん が誤 あやま っていると、無限 むげん に関数 かんすう を呼 よ び出 だ し続 つづ けることがある(暴走 ぼうそう )。無限 むげん 再帰 さいき に陥 おちい ると、スタックオーバーフロー によりプログラムが異常 いじょう 終了 しゅうりょう したり、システムが停止 ていし したりする原因 げんいん となる。
連結 れんけつ リスト や木 き 構造 こうぞう は、要素 ようそ (ノード)の型 かた の中 なか にその要素 ようそ 型 がた 自身 じしん への参照 さんしょう (自己 じこ 参照 さんしょう )が存在 そんざい するようなデータ型 がた を用 もち いて実現 じつげん される。これは再帰 さいき 的 てき データ構造 こうぞう (再帰 さいき データ型 がた )である。再帰 さいき 的 てき データ構造 こうぞう の探索 たんさく には、再帰 さいき 呼 よ び出 だ しを使 つか うことが多 おお い。
下記 かき は Java での例 れい 。Tree のクラス定義 ていぎ の中 なか で Tree を使用 しよう している。
class Tree {
Tree [] children ;
}
ある大 おお きな部位 ぶい が複数 ふくすう の小 ちい さな自己 じこ 相似 そうじ に分岐 ぶんき する構造 こうぞう (フラクタル )など、再帰 さいき 的 てき な過程 かてい によって生 しょう じたと思 おも われる形状 けいじょう が、植物 しょくぶつ や動物 どうぶつ で時々 ときどき 見 み られる。野菜 やさい のロマネスコ がその一 いち 例 れい である[ 14]
再帰 さいき 的 てき な人形 にんぎょう の例 れい :一 いち 組 くみ のマトリョーシカ人形 にんぎょう (1892年 ねん )
ドロステ効果 こうか と呼 よ ばれる再帰 さいき の視覚 しかく 形式 けいしき 。このココア 箱 はこ に描 えが かれた女性 じょせい の持 も つ盆 ぼん の上 うえ にあるココア箱 ばこ には、再 ふたた び同 おな じ構図 こうず の絵 え が描 えが かれている。ジャン・ミュゼ画 が (1904)
ロシアで生 う まれたマトリョーシカ人形 にんぎょう は、再帰 さいき という概念 がいねん の物理 ぶつり 的 てき 造形 ぞうけい 例 れい で[ 15] 、日本 にっぽん ではこうした形式 けいしき を「入 い れ子 こ 細工 ざいく 」とも呼 よ んでいる。
再帰 さいき は、1320年 ねん に作 つく られたジョット の三 さん 連 れん 祭壇 さいだん 画 が (Stefaneschi Triptych ) 以来 いらい 、絵画 かいが で使用 しよう されている。この中央 ちゅうおう パネルにはステファネスキ枢機卿 すうききょう のひざまずく姿 すがた があり、三 さん 連 れん 祭壇 さいだん 画 が 自体 じたい を供物 くもつ として掲 かか げている[ 16] [ 17] 。この手法 しゅほう は一般 いっぱん 的 てき にドロステ効果 こうか と通称 つうしょう されており、紋 もん 中 ちゅう 紋 もん 技法 ぎほう の一 いち 例 れい である。
マウリッツ・エッシャー による1956年 ねん の作品 さくひん (Print Gallery (M. C. Escher) ) は、再帰 さいき 的 てき な絵 え を飾 かざ った画廊 がろう を含 ふく む歪 いが んだ都市 とし を描 えが いた版画 はんが で、無限 むげん に堂々巡 どうどうめぐ りする構図 こうず となっている[ 18] 。
日本 にっぽん の文芸 ぶんげい 作品 さくひん では、夢野 ゆめの 久作 きゅうさく の『ドグラ・マグラ 』が再帰 さいき 的 てき である。本 ほん 作 さく の序盤 じょばん に、記憶 きおく 喪失 そうしつ の青年 せいねん は『ドグラ・マグラ』なる小説 しょうせつ (記憶 きおく 喪失 そうしつ の精神 せいしん 患者 かんじゃ が書 か いたもの)を見 み つけることになり、この作中 さくちゅう 作 さく に綴 つづ られている展開 てんかい や結末 けつまつ をなぞるかのように本 ほん 作 さく も展開 てんかい していき混迷 こんめい の結末 けつまつ へ、という入 い れ子 こ 構造 こうぞう が見 み られる[ 19] 。
落語 らくご 『頭山 とうやま 』の、自分 じぶん 自身 じしん の頭 あたま に出来 でき た池 いけ に身投 みな げしてしまう、というサゲも、再帰 さいき 的 てき なものとして言及 げんきゅう されることがある。[ 20] [ 21]
ここではプログラミング手続 てつづ きの観点 かんてん から、再帰 さいき との主 おも な違 ちが いを述 の べる。
回帰 かいき - 元々 もともと あったオブジェクト(元 もと の位置 いち や状態 じょうたい )に戻 もど ってくる事 こと を指 さ す。
対 たい して「再帰 さいき 」は元々 もともと のオブジェクトではなく、その参照 さんしょう (計算 けいさん 機 き 科学 かがく ) にあたる小 ちい さいオブジェクトを呼 よ び出 だ す。
帰納 きのう - 証明 しょうめい 手続 てつづ きの方向 ほうこう 性 せい として「基底 きてい 段階 だんかい の小 ちい さなものから段々 だんだん と大 おお きい(普遍 ふへん 的 てき な)もの」へと進 すす んでいく。特 とく に数学 すうがく 的 てき 帰納 きのう 法 ほう の帰納 きのう 段階 だんかい では、任意 にんい の自然 しぜん 数 すう
k
{\displaystyle k}
に対 たい して
P
(
k
)
→
P
(
k
+
1
)
{\displaystyle P(k)\to P(k+1)}
が成 な り立 た つ事 こと を示 しめ す。
対 たい して「再帰 さいき 」のプログラムは「大 おお きなものから、段々 だんだん と小 ちい さいもの」に進 すす んでいく[ 22] 。
P
(
k
)
{\displaystyle P(k)}
を計算 けいさん するために
k
−
1
{\displaystyle k-1}
の参照 さんしょう オブジェクトを呼 よ び出 だ し、この
k
{\displaystyle k}
が基底 きてい 段階 だんかい に達 たっ するまで処理 しょり を繰 く り返 かえ し行 おこな う。
言語 げんご
数学 すうがく
計算 けいさん 機 き 科学 かがく
その他 た
^ 記述 きじゅつ している対象 たいしょう と同義 どうぎ な性質 せいしつ ・情報 じょうほう を有 ゆう する(幾何 きか 学 がく でいう相似 そうじ 関係 かんけい の)主 おも に小 ちい さい事象 じしょう を参照 さんしょう と呼 よ ぶ。記述 きじゅつ している対象 たいしょう と完全 かんぜん に同一 どういつ なもの(幾何 きか 学 がく でいう合同 ごうどう 図形 ずけい )は参照 さんしょう に含 ふく めない。
^ 顛末 てんまつ まで解説 かいせつ すると、"recursion"の文字 もじ 列 れつ には青 あお のページリンクが張 は られており、このリンク先 さき が"recursion"を再 さい 検索 けんさく (自己 じこ 参照 さんしょう )した結果 けっか ページという洒落 しゃれ 。日本語 にほんご 版 ばん Google検索 けんさく でも、「再帰 さいき 」を検索 けんさく すると同様 どうよう の仕組 しく みが「もしかして:再帰 さいき 」で見 み られる。
^ なお、自然 しぜん 数 すう に0を含 ふく めるか否 ひ かは扱 あつか う数学 すうがく 分野 ぶんや によって異 こと なることがある(例 たと えば数 かず 論 ろん や解析 かいせき 学 がく では一般 いっぱん に0を含 ふく めない)。詳細 しょうさい は自然 しぜん 数 すう を参照 さんしょう 。
^ フィボナッチ数列 すうれつ の非 ひ 再帰 さいき 的 てき な一般 いっぱん 項 こう は、次 つぎ の通 とお り[ 12] :
F
n
=
1
5
{
(
1
+
5
2
)
n
−
(
1
−
5
2
)
n
}
{\displaystyle F_{n}={\frac {1}{\sqrt {5}}}\left\{\left({\frac {1+{\sqrt {5}}}{2}}\right)^{n}-\left({\frac {1-{\sqrt {5}}}{2}}\right)^{n}\right\}}
^ a b 林 はやし 創 はじめ 「再帰 さいき 呼 よ び出 だ しを含 ふく む手続 てつづ き処理 しょり の難 むずか しさ 」日本 にっぽん 認知 にんち 科 か 学会 がっかい 『認知 にんち 科学 かがく 』6巻 かん (1999) 4号 ごう 、389-405頁 ぺーじ
^ Wirth,N.(1986)Algorithms & Data Structures (浦 うら 昭二 しょうじ ・国府 こくぶ 方 ほう 久史 ひさし 訳 わけ 『アルゴリズムとデータ構造 こうぞう 』東京 とうきょう 近代 きんだい 科学 かがく 社 しゃ 、1990年 ねん )
^ “Peano axioms | mathematics ” (英語 えいご ). Encyclopedia Britannica . 2019年 ねん 10月 がつ 24日 にち 閲覧 えつらん 。
^ Pinker, Steven (1994). The Language Instinct . William Morrow
^ Pinker, Steven; Jackendoff, Ray (2005). “The faculty of language: What's so special about it?”. Cognition 95 (2): 201?236. doi :10.1016/j.cognition.2004.08.004 . PMID 15694646 .
^ Nordquist, Richard. “What Is Recursion in English Grammar? ” (英語 えいご ). ThoughtCo . 2019年 ねん 10月 がつ 24日 にち 閲覧 えつらん 。
^ Nevins, Andrew; Pesetsky, David; Rodrigues, Cilene (2009). “Evidence and argumentation: A reply to Everett (2009)” . Language 85 (3): 671?681. doi :10.1353/lan.0.0140 . オリジナル の2012-01-06時点 じてん におけるアーカイブ。. https://web.archive.org/web/20120106154616/http://web.mit.edu/linguistics/people/faculty/pesetsky/Nevins_Pesetsky_Rodrigues_2_Evidence_and_Argumentation_Reply_to_Everett.pdf .
^ Drucker, Thomas (4 January 2008). Perspectives on the History of Mathematical Logic . Springer Science & Business Media. p. 110. ISBN 978-0-8176-4768-1 . https://books.google.com/books?id=R70M4zsVgREC&pg=PA110
^ Barbara Partee and Mats Rooth. 1983. In Rainer Bäuerle et al., Meaning, Use, and Interpretation of Language . Reprinted in Paul Portner and Barbara Partee, eds. 2002. Formal Semantics: The Essential Readings . Blackwell.
^ a b Hunter, David (2011). Essentials of Discrete Mathematics . Jones and Bartlett. pp. 494. ISBN 9781449604424 . https://books.google.com/books?id=kuwhTxCVovQC&q=recursion+joke
^ “recursion - Google Search ”. www.google.com . 2019年 ねん 10月 がつ 24日 にち 閲覧 えつらん 。
^ 奥村 おくむら 晴彦 はるひこ 『C言語 げんご による最新 さいしん アルゴリズム事典 じてん 』技術評論社 ぎじゅつひょうろんしゃ 、1991年 ねん 、305頁 ぺーじ 。ISBN 4-87408-414-1 。
^ 百物語 ひゃくものがたり 改 あらた め「九 きゅう 一 いち 三 さん ・六 ろく 物語 ものがたり 」「アッカーマン関数 かんすう の漸 すすむ 化 か 式 しき による説明 せつめい 、数列 すうれつ ・カリー化 か 」2015年 ねん 1月 がつ 27日 にち
^ “Picture of the Day: Fractal Cauliflower ” (28 December 2012). 19 April 2020 閲覧 えつらん 。
^ “Recursion ”. 24 September 2015 閲覧 えつらん 。 “More examples of recursion: Russian Matryoshka dolls. Each doll is made of solid wood or is hollow and contains another Matryoshka doll inside it.”
^ “Giotto di Bondone and assistants: Stefaneschi triptych ”. The Vatican. 16 September 2015 閲覧 えつらん 。
^ Svozil, Karl (2018). Physical (A)Causality: Determinism, Randomness and Uncaused Events . Springer. pp. 12. https://books.google.com/books?id=gxBMDwAAQBAJ&pg=PA12
^ “Art and Mathematics ” (5 September 2007). 5 July 2020 閲覧 えつらん 。
^ ホンシェルジュ「5分 ふん でわかる『ドグラ・マグラ』読 よ んだら気 き が狂 くる う?【あらすじと解説 かいせつ 】 」2022年 ねん 3月 がつ 24日 にち
^ 数学 すうがく における 落語 らくご 『頭山 とうやま 』の世界 せかい 自分 じぶん 自身 じしん を使 つか って自分 じぶん を定義 ていぎ する2023年 ねん 9月 がつ 8日 にち 閲覧 えつらん 。
^ 地球 ちきゅう にやさしいアルゴリズム 第 だい 6回 かい 上手 じょうず なアルゴリズムの見 み つけ方 かた 2023年 ねん 9月 がつ 8日 にち 閲覧 えつらん 。
^ タクマ「【再帰 さいき 的 てき プログラム】再帰 さいき ・帰納 きのう の違 ちが いを解説 かいせつ 【階 かい 乗 じょう 0!が1の理由 りゆう 】 」2020年 ねん 5月 がつ 21日 にち
ウィキメディア・コモンズには、
再帰 さいき に
関連 かんれん するカテゴリがあります。