The way my teacher taught us recursion is this:
You need to isolate the base case(s). In this situation, the node being checked is a leaf node (i.e. it has no children at all) would be the base case since the first time you arrive at that condition, you have the minimum path.
You could also consider an invalid argument (not a binary tree node or a null node) to be a base case as well but I would have handled it before going into the recursive stepping just so it doesn't need to check for these conditions every iteration. However, it works fine being in the recursive stepping as well since it should not appear after the first iteration.
This situation has three conditions for recursive steps: a node with a left child and no right child, a node with no left child and a right child, a node with both a right child and a left child. You need to handle each of those and set it to recurse on each of those where there is a child.
Using m0ti's code, here is how I would classify it:
if (ptr == null) return 0;
check for invalid argument
if (ptr->left == null && ptr->right == null) return 0;
check for base case
if (ptr->left == null) return 1 + long(ptr->right);
if (ptr->right == null) return 1 + long(ptr->left);
return 1 + min(long(ptr->left), long(ptr->right));
recursive steps handled appropriately