欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

求集合的幂集

程序员文章站 2022-06-09 22:03:30
...

这是朋友叫我帮他写的,足足干了两天,终于在养好精神后把它做出来了,虽然是递归实现的,但总算是弄出来了,两天时间里搞了好多遍循环来实现,但是写着写着就迷糊了,洗了个头,刷了把脸,人精神了,换了递归刺溜一下就写出来了,手动开心 哈哈哈哈。

但是据说还可以用分治法、回溯法、穷举法来实现哦

#include<stdio.h>
#include<iostream>
using namespace std;


void func(int index, int arr[], int len1, int buffer[],int len2) {
    for (int i = index; i < len1; i++) {//让每个数都能和上一次的记录进行配合,注意起始位置,起始位置是从上一次记录末尾的后一位开始的。
        printf("{");
        for (int j = 0; j < len2; j++) {//先输出上一次的记录
            printf("%d,", buffer[j]);
        }
        printf("%d}", arr[i]);//输出新增加的数
        buffer[len2] = arr[i];//把新增加的数加到记录里方便下次输出
        if (i + 1 < len1 ) func(i + 1, arr, len1, buffer,len2+1);//函数递归,传递记录,让这次的记录和下次的新增加的数一起输出。
    }
}


int main() {
    const int len1 = 4;//原始数组大小
    int arr[len1] = { 1,2,3,4 };//原始数组
    int buffer[len1]; //用来记录上一次的输出记录例如{1,2,3} 他的上一次记录为{1,2}
    int len2 = 0;//用来记录buffer的大小
    int index = 0;
    func(index, arr, len1, buffer,len2);
    return 0;
}

输出结果
{1}{1,2}{1,2,3}{1,2,3,4}{1,2,4}{1,3}{1,3,4}{1,4}{2}{2,3}{2,3,4}{2,4}{3}{3,4}{4}

相关标签: 递归