Cogito Ergo Sum.

我思う故に我あり

ようやくわかった!

 僕は長い間「再帰的関数」の面白さがわからなかったのだけど、ようやくわかった。その面白さ(と怖ろしさ)は「多重ループの深さが実行時に(データの階層構造に合わせて)自動的に決まる」ことにある!

 だから、「(単なる1次元の、つまり1重の)ループ処理を実現している」だけの「階乗」の関数の例なんかは面白くなくて当然なわけだ。だけど、「ハノイの塔」や「クイックソート」は違う。

 考えてみれば、ハノイの塔やクイックソートの関数を再帰を使わずにWhile等を用いた通常のループ処理で書くことはできない。ループを何重にすればいいか決まらないから。

 だから、再帰処理の面白さは、(よく言われるように)「丸投げ処理でループ処理を実現できる」ことにあるのではなく、「与えられた要素の子要素に対しても同じ処理を行う」という(再帰処理の)記述を1回書くだけで、子要素にも孫要素にも曾孫要素にもヤシャゴ要素にも同じ処理を実現できるところにある。つまり、実行時にならないと入れ子構造の深さが決まらないような多重ループ処理を動的に実現してしまう点にあるのだ。す、す、す、凄っごいじゃん、それって!

 うわーっっ、再帰最高!