We can draw a recursion trace, where we have a box for each recursive call, an arrow from each caller to callee and an arrow from each callee to caller showing return value.
Here’s an example of the Factorial Function:
digraph {
start [shape=point]
4 [label="factorial(4)"]
3 [label="factorial(3)"]
2 [label="factorial(2)"]
1 [label="factorial(1)"]
0 [label="factorial(0)"]
start->4 [label=" call"]
4->3 [label=" call"]
3->2 [label=" call"]
2->1 [label=" call"]
1->0 [label=" call"]
0->1 [label=" return 1"]
1->2 [label=" return 1"]
2->3 [label=" return 2"]
3->4 [label=" return 6"]
4->start [label=" return 24"]
}