错过了使用递归查找总和的逻辑,得到了段错误

我试图实现以下使用recurssion但我得到segfault请纠正我?

我尝试使用集合{1,,3,5,7}的排列解决问题,但未能输出所需的结果打印奇数部分中的数字的所有组成,即对于n = 8:7 + 1
5 + 3
5 + 1 + 1 + 1
3 + 3 + 1 + 1
3 + 1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1

sumto8(a,start,sum1)是://选择关注元素sumto8(a,start,sum)是://选择关注元素

#include #include int sumto8(int*,int,int); int n=4; int c=8; int main() { int a[]={1,3,5,7}; sumto8(a,0,c); } int sumto8(int* a,int start,int sum) { if((sum(n-1))) return -1; if(sum==0) { cout<<" "<<a[start]; return printf("+ %d",a[start]); } if(i==-1) { return-1; } if(j==-1) { return -1 } else { int sum1=sum-a[start]; int i=sumto8(a,start,sum1); int j=sumto8(a,start+1,sum); } return printf("+ %d",a[start]); } 

似乎sum <0的if条件没有正确检查……

 output :segfault 

你说

似乎sum <0的if条件没有正确检查......

我发现你的检查是这样的

  if((sum<0) && (start>(n-1))) return -1; 

如果“和”你把它改成“或”

  if((sum<0) || (start>(n-1))) return -1; 

我发现main中的嵌套for循环存在一个问题。 它应该读取for(int j=0; j 。 你将它作为j ,它将超出你声明它的数组范围

编辑:此部分还有另一个问题:

  /*dp[start][sum1]=*/sumto8(a,start,sum1);//choosing element of concern start++; /*dp[start][sum]*/=sumto8(a,start,sum); 

在第二次调用sumto8你没有注释掉= 。 你有很多空白和注释代码。 你也永远不会像现在所有注释的那样调用isVisited()函数,并且在sumto8函数的末尾你最后有两个相同的return语句。 如果你把它清理一下,如果你自己和这里的每个人都会有所帮助。