gpt4 book ai didi

c - 将带有 for 循环的递归函数转变为纯递归

转载 作者:行者123 更新时间:2023-11-30 21:27:22 24 4
gpt4 key购买 nike

我已经创建了这个函数来打印给定数组中的幂集,我本质上以 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);

编辑:发布解决方案!

最佳答案

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

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

关于c - 将带有 for 循环的递归函数转变为纯递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com