code: public static List<Match> searchRecursive(Match match, List<MappedConst> mc, int index) 
  	{
  		List<Match> result = new ArrayList<Match>();
  
  		Constraint con = mc.get(index).getConstr();
  		int[] ind = mc.get(index).getInds();
  		int lastInd = ind[ind.length-1];
  
  		if (con.canGenerate() && match.get(lastInd) == null)
  		{
  			Collection<BioPAXElement> elements = con.generate(match, ind);
  
  			for (BioPAXElement ele : elements)
  			{
  				match.set(ele, lastInd);
  				
  				if (mc.size() == index + 1)
  				{
  					result.add((Match) match.clone());
  				}
  				else
  				{
  					result.addAll(searchRecursive(match, mc, index + 1));
  				}
  				
  				match.set(null, lastInd);
  			}
  		}
  		else
  		{
  			if (con.satisfies(match, ind))
  			{
  				if (mc.size() == index + 1)
  				{
  					result.add((Match) match.clone());
  				}
  				else
  				{
  					result.addAll(searchRecursive(match, mc, index + 1));
  				}
  			}
  		}
  		return result;
  	}
docs: Continues searching with the mapped constraint at the given index.
  @param match match to start from
  @param mc mapped constraints of the pattern
  @param index index of the current mapped constraint
  @return matching results