def all_subsets(aset):
    """Solution to exercise C-4.15.

    Write a recursive function that will output all the subsets of a set of n
    elements (without repeating any subsets).

    --------------------------------------------------------------------------
    Solution:
    --------------------------------------------------------------------------
    I've made the following assumptions:
        1. The input is a list of unique numbers
        2. The set itself is considered a subset (not a proper subset)
        3. The empty set is considered a subset
    """

    def recurse(alist):
        if not alist:
            return [[]]  # Base case, return empty set
        prev_lists = recurse(alist[1:])
        return prev_lists + [[alist[0]] + y for y in prev_lists]

    return recurse(aset)