再帰呼び出しとは?

再帰呼び出し(Recursive Call)とは、プロシージャの中でプロシージャ自身を呼び出すことを言います。

再帰呼び出しの働き

再帰呼び出しなどとたいそうな名前はついていますが、別に特別な構文があるわけではなく、「ただそれだけ」の話です。しかし、再帰呼び出しを利用することで、不特定多数の階層を持ったデータを必要最小限のコードで処理できます。

先ほども述べたように、FileListプロシージャは指定されたフォルダ「直下」のファイルを一覧にするためのプロシージャです。たとえば、「C:\Data」フォルダが指定されたとすれば「C:\Data」フォルダの直下にあるファイルだけしか一覧にできません。

しかし当然のことながら、「C:\Data」フォルダの配下には(一般的には)多くのサブフォルダが含まれているはずです。そして、サブフォルダの配下にも更にサブフォルダが含まれているかもしれませんし、更にその配下にも...。しかし、これらフォルダの階層構造を、スクリプトがあらかじめ知ることはできません。これらサブフォルダ一つ一つに対して、ファイルリストを作成するためのプロシージャを定義するのは、直観的に考えても現実的ではないでしょう。

そこで登場するのが、再帰呼び出しなのです。再帰呼び出しを利用することで、FileListプロシージャはまず最上位のフォルダ直下のファイルリストを作成し、その配下にサブフォルダがある場合にはまたその直下のファイルリストを作成するためにFileListプロシージャを呼び出し、更にその配下にサブフォルダがある場合には...というように、配下のサブフォルダがなくなるまで、FileListプロシージャを呼び出し続けます。

再帰呼び出しを利用することで、あらかじめフォルダの階層数が分かっていない場合でも、必要な数だけFileListプロシージャが呼び出されるというわけです。 再帰呼び出しは、特に階層型のデータ構造を処理する場合に効果的な手法ですので、ここでしっかりとおさえておきたいところです。

FileListプロシージャの呼び出し

はい、ここまでがスクリプトの全体像です。おおよそのコードの流れが見えてきましたか。それでは、以降ではより細かな個々のコードについて、もう少し詳しく見ていくことにしましょう。