For each element, make two choices: include it in the current subset or exclude it. This generates all 2^n subsets.
Base case: when you reach the end of the array, add the current subset to results.
Recursive case: at index i, first include nums[i] and recurse, then exclude nums[i] and recurse. Both branches explore all possibilities.