代码如下:
function getSubSets([head, ...rest]) {
// 如果是空数组间接返回空子集
if (!head) return [[]];
// 失去除第一个元素之外的子数组的所有子集
const restSubSets = getSubSets(rest);
// n 个元素的子集就等于 n - 1 个元素的子集合并上
// n- 1 个元素的每一个子集加上第一个元素造成的汇合
return [
...restSubSets, // n- 1 个元素的子集
...restSubSets.map(set => [head, ...set]) // n- 1 个元素的每一个子集加上第一个元素造成的汇合
];
}