function recursive_graph_dfs(visit, node, nodes, links, visitedNodes, delay) {
visit(node, delay)
const connectedLinks = links.filter(d=>d.source.id == node.id || d.target.id == node.id)
const unvistedNodeIds = connectedLinks
.map(link => link.source.id == node.id ? link.target.id: link.source.id)
.filter(nodeId=>visitedNodes.indexOf(nodeId) < 0)
const unvisitedNodes = unvistedNodeIds.map(id=>nodes.filter(node=>node.id == id)[0])
unvisitedNodes.map(node=>{
visitedNodes.push(node.id)
delay = recursive_graph_dfs(visit, node, nodes, links, visitedNodes, delay+=c.animationDuration)
visit(node, delay+=c.animationDuration)
})
return delay
}