¿Cómo manejar la recursividad en XQuery?

Estoy tratando de encontrar todos los países a los que se puede llegar por tierra atravesando un país a otro a través de fronteras terrestres utilizando la base de datos mondial.sql. Debe hacerse de forma recursiva y encontré algunas funciones en línea que pensé que serían útiles para unir secuencias y para poder excluir países que ya se han encontrado.

El problema es que termino en un círculo a pesar de que los países que van a ser excluidos parecen manejarse adecuadamente. Entonces, mi opinión es que podría tener que definir un caso base de alguna manera para hacer que la recurrencia se detenga una vez que se hayan encontrado todos los países posibles. ¿Cómo lograr esto con XQuery?

(:functx.value-union and is-value-in-sequence were found at http://www.xqueryfunctions.com/xq/:)
declare namespace functx = "http://www.functx.com";
declare function functx:value-union
  ( $arg1 as xs:anyAtomicType* ,
    $arg2 as xs:anyAtomicType* )  as xs:anyAtomicType* {

  distinct-values(($arg1, $arg2))
 };

 declare function functx:is-value-in-sequence
  ( $value as xs:anyAtomicType? ,
    $seq as xs:anyAtomicType* )  as xs:boolean {

   $value = $seq
 } ;

(:Recursive function for finding reachable countries:)
declare function local:findReachable($countries, $country, $reachedCountries) {
    let $reachableCountries := $countries[@car_code = $country/border/@country]
    for $c in $reachableCountries
    where not(functx:is-value-in-sequence($c, $reachedCountries))
    return functx:value-union($c, local:findReachable($countries, $c, functx:value-union($reachableCountries, 
    $reachedCountries)))
};

let $countries := //country
let $startingCountry := //country[@car_code = 'S']
return local:findReachable($countries, $startingCountry, $startingCountry)

Respuestas a la pregunta(1)

Su respuesta a la pregunta