再帰を用いたプログラミングは,「自明だけど非実用的な(再帰を用いないほうが自然な)例」か「興味深いけどコードが複雑な例」しか思い浮かびません.
ここ3年,クイックソート(の変種)を取り上げてきました.ついでに,分割統治法という言葉も説明しています:
対象領域を細分化(分割)して求め(統治),全体として正しい解になるようにする.
なのですが,去年まではこうでした:
対象領域を細分化(分割)して求め,全体として正しい解になる(統治)ようにする.
どっちが正しいのでしょうか.私自身,よく分かっていません*1.
今この二つを並べて見直したところ,もしかしたらこうなのかもしれません:
対象領域を細分化して求め(分割),全体として正しい解になる(統治)ようにする.
クイックソートも分割統治法を利用したアルゴリズムですが,クイックソートでは,全体として正しい解になる「ようにする」処理を特にしていません.なので,分割統治法の典型例として,クイックソートを取り上げるのが不適切なのかもしれません.
授業中にきちんと言えなかったのですが,ここで,再帰と分割統治法の注意点を書いておきます: