サンプルプログラム WebpageViewer.java は、 ユーザが指定した 1 つのページを取得するものでした。 これを、ページ内のリンクをたどって複数のページを取得するようにするには、 どうしたらよいでしょうか。
取得したページの内容を解析し、リンク先 URL を取得する処理が必要になります。 これは、String クラスの文字列処理や、 正規表現によるマッチングを行うことにより実現できます。 (本格的には HTML Parser を使います)
サンプルプログラム WebpageViewer.java では、 1 つのページを取得するためのクラス Webpage がありました。 このクラスを、指定した URL のページと、 そのページからリンクでたどっていけるすべてのページを取得するクラスへと変更することを考えます。
Webpage クラスの run() メソッドでは、 ページ内のリンクが順に抽出されるようになっているはずです。 ここで、抽出した各URL のページについても、 そのページからリンクでたどっていけるすべてのページを取得するという処理が求められています。 つまり、最初に指定する URL と同じ扱いをする必要があります。
このような場合、抽出した各 URL についても、 対応する Webpage クラスのインスタンスを生成すれば、 同じ処理が可能になります。 つまり、Webpage クラスの run() メソッドの中で、 さらに Webpage クラスのインスタンスを生成すればよいのです。
このように、自分の中に自分が現れる構造を再帰的な構造、といいます。