func DFSRecursion(g Graph, id ID) []ID {
	if _, err := g.GetNode(id); err != nil {
		return nil
	}

	visited := make(map[ID]bool)
	rs := []ID{}

	dfsRecursion(g, id, visited, &rs)

	return rs
}
func DFSRecursion(g Graph, id ID) []ID {
	if _, err := g.GetNode(id); err != nil {
		return nil
	}

	visited := make(map[ID]bool)
	rs := []ID{}

	dfsRecursion(g, id, visited, &rs)

	return rs
}
// DFSRecursion does depth-first search recursively.
//
//	 0. DFS(G, v):
//	 1.
//	 2. 	if v is visited:
//	 3. 		return
//	 4.
//	 5. 	label v as visited
//	 6.
//	 7. 	for each vertex u adjacent to v:
//	 8.
//	 9. 		if u is not visited yet:
//	10. 			recursive DFS(G, u)
//