-4

我已经制作了这个函数来在给定的数组中打印 powerset,我以 for 循环为基础构建了该函数,然后将其转换为纯递归,但我似乎遇到了障碍。

这是功能:

void powerSet(int* arr, int* p, int n, int pos, int index)
{
    if (index == n)
    {
        return;
    }
    for (int i = index; i<n; i++)
    {
        p[pos] = arr[i];

        for (int j = 0; j <= pos; j++)
            printf("%d ", p[j]);
        printf("\n");

        powerSet(arr, p, n, pos + 1, i + 1);
    }
}

更新:

到目前为止,这是我的代码,由于某种原因,它只打印出来

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

片段:

void powerSet(int* arr, int* p, int n, int pos, int index)
{
    if (index == n)
    {
        return;
    }
    p[pos] = arr[index];
    PrintRec(0, pos, p);
    powerSet(arr, p, n, pos + 1, index + 1);
}
void getSubSet(int*arr, int*p, int n, int i, int end)
{
    if (i > end)
        return;
    powerSet(arr, p, n, i, end);
    getSubSet(arr, p, n, i + 1, end);
}
void PrintRec(int j, int end, int* p)
{
    if (j > end)
    {
        printf("\n");
        return;
    }
    printf("%d ", p[j]);
    PrintRec(j + 1, end, p);
}

主要的:

int arr[] = { 1,2,3,4,5 };
int n = sizeof(arr) / sizeof(arr[0]);
int temp[5];
getSubSet(arr, temp, n, 0, 0);

编辑:发布解决方案!

4

1 回答 1

0

我终于设法弄清楚了,这里是任何关心的人的答案:

void main()
{
    int arr[] = { 1,2,3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int temp[4];
    powerSet(arr, temp, n, 0, 0);
}

void powerSet(int* arr, int* p, int n, int pos, int index)
{
    if (index >= n)
    {
        return;
    }
    p[pos] = arr[index];
    PrintRec(0, pos, p);
    powerSet(arr, p, n, pos + 1, index + 1);
    powerSet(arr, p, n, pos, index+1);

}
void PrintRec(int j, int end, int* p)
{
    if (j > end)
    {
        printf("\n");
        return;
    }
    printf("%d ", p[j]);
    PrintRec(j + 1, end, p);
}

输出:

1
1 2
1 2 3
1 3
2
2 3
3
于 2018-09-05T16:39:44.023 回答