Nie jestem w stanie zrozumieć rekurencji funkcji. Jak to działa? jak przechowywane są wartości i wszystkie?

Nie jestem w stanie zrozumieć rekurencji funkcji. Jak to działa? jak przechowywane są wartości i wszystkie?

int tree_size(struct node* node) { 
  if (node==NULL) {
    return(0); 
  } else { 
    return(tree_size(node->left) + tree_size(node->right) + 1); 
  } 
}