DFS with recursion and without stack
Well, your code is indeed doing DFS and it is doing tail recursion. I don't see any improvement from an algorithm perspective. 
One low-hanging fruit is to get rid of seen_nodes as it seems to exist only for debugging purposes.