At each position, you have up to two choices:
Take one digit (if it's -, not )
Take two digits (if they form -) For "": at position , you can take "" (valid) or "" (valid). At position , you can take "" (valid) or "" (valid). These choices branch out into different decodings. This branching, choosing one or two digits, is the core recursive structure of the problem.