recursive enumeration