private boolean circuit(V v, int depth, TaskMonitor monitor) throws CancelledException {
		monitor.checkCancelled();

		// TODO
		// Sigh.  We are greatly limited in the size of paths we can processes due to the 
		// recursive nature of this algorithm.  This should be changed to be non-recursive.
		if (depth > JAVA_STACK_DEPTH_LIMIT) {
			return false;
		}

		boolean foundCircuit = false;
		blockedSet.add(v);
		stack.push(v);
		Collection<E> outEdges = subGraph.getOutEdges(v);
		for (E e : outEdges) {
			V u = e.getEnd();
			if (u.equals(startVertex)) {
				outputCircuit();
				foundCircuit = true;
			}
			else if (!blockedSet.contains(u)) {
				foundCircuit |= circuit(u, depth + 1, monitor);
			}
		}

		if (foundCircuit) {
			unblock(v);
		}
		else {
			for (E e : outEdges) {
				V u = e.getEnd();
				addBackEdge(u, v);
			}
		}
		stack.pop();
		return foundCircuit;
	}
Finds the circuits in the graph passed at construction time.

@param uniqueCircuits true signals to return only unique circuits, where no two 
       circuits will contain the same vertex
@param monitor the task monitor
@throws CancelledException if the monitor is cancelled
Ghidra/Framework/Graph/src/main/java/ghidra/graph/algo/JohnsonCircuitsAlgorithm.java