当我用大于 12 个元素的大 vector 测试我的程序时,它崩溃了(我得到一个 lldb 错误)。但是,它适用于小 vector 。我认为它正在尝试访问不应该访问的内存空间,但我不知道如何修复它。该程序应该打印出元素总和等于“目标”的 vector 另外,我可以用不同的方式表达:if (i & (1 << j)) 吗?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int c = 0;
/* find subsets of a given set */
void findSubsets(int *value, int n, int i) {
int j;
if (i < 0)
return;
for (j = 0; j < n; j++) {
/*
* checking jth bit is set in i. If
* it is set, then fetch the element at
* jth index in value array
*/
if (i & (1 << j)) {
suma = suma + value[j];
}
/* recursive call */
findSubsets(value, n, i - 1);
return;
}
int main() {
/* 2^n - indicates the possible no of subsets */
int count = pow(2, size);
/* finds the subsets of the given set */
findSubsets(vector, size, count - 1);
return 0;
}
我希望能够将此程序用于大 vector (最多约 20 个)
问题是您得到了 52428810
递归函数调用。这将导致堆栈溢出。尝试迭代而不是递归:
for (int i = 0; i < count; i++) {
findSubsets(vector, size, i);
}
并删除 findSubsets
中的递归调用。
我是一名优秀的程序员,十分优秀!