Как построить рекурсивную функцию?
Введите очередь ссылок. Как только обработали страницу, добавьте в очередь все следующие ссылки. В цикле считывайте ссылки, загружайте и парсите их и так пока очередь не закончится. Никаких рекурсий тут не нужно.
Так же как дополнительный профит можно выбирать из очереди по несколько ссылок и использовать multi curl что бы скачивать документы в несколько потоков.
Чтобы понять рекурсию, нужно понять рекурсиюfunction parse_recursive($url) {
 $dom = new DOMDocument();
 $dom->loadHTMLFile($url); 
 $xpath = new DOMXpath($dom); 
 $pattern = "//a[@class='foo']";
 if ($xpath->query($pattern)->length == 0) {
   return;
 }
 else{
     foreach($xpath->query($pattern) as $cat) {
	 parse_recursive($cat->getAttribute("href"));
     }
 }
}