Я не могу понять рекурсию функций. Как это устроено? как хранятся значения и все?

Я не могу понять рекурсию функций. Как это устроено? как хранятся значения и все?

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