Compositパターン
再帰処理を使う時に、よく使うパターンです。
このパターンだからこそ、再帰処理が必要になる、という事例かもしれません。
同一視できるオブジェクトを定義する
ファイルシステムがよく例に出されます。
なのでファイルシステムで考えてみましょう。
フォルダを消すと、中にあるファイルも全部消えますよね。
中にフォルダがあって、その中にファイルがあって…というのも全部消えますよね。
そういう処理ができるようにするパターンだと思ってください。
「消える」実装を統一すること
子供を持っているオブジェクトに対して、「オブジェクトを消す」という処理をするときに、期待する挙動は「子供も一緒に消える」ですよね。
これを実装することを考えます。
基本的には「子供に責任を持つ」という実装をとることが多いです。
再帰処理を考えてみましょう。
親は子供と一緒に消えてほしいので、親は消える時に、子供それぞれに対してそれぞれ「オブジェクトを消す」命令を発行します。
このとき、もし子供がさらに子供を持っていたら…というのを考えてみてください。
これが再帰処理の基本的な考え方です。