我尝试使用recurssion实现以下功能,但我得到了段错误,请纠正我吗?
我尝试使用set {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<iostream>
#include<stdio.h>
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<0) || (start>(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]);
}
总和&lt; 0的if条件似乎没有正确检查......
output :segfault
答案 0 :(得分:2)
总和&lt; 0的if条件似乎没有正确检查......
我发现你的检查是这样的
if((sum<0) && (start>(n-1)))
return -1;
如果“和”如何将其更改为“或”
if((sum<0) || (start>(n-1)))
return -1;
答案 1 :(得分:1)
我发现main中的嵌套for循环存在一个问题。它应该是for(int j=0; j<c; j++)
。你有j<c+1
它将超出数组的界限,因为你声明了它
编辑:此部分还有另一个问题:
/*dp[start][sum1]=*/sumto8(a,start,sum1);//choosing element of concern
start++;
/*dp[start][sum]*/=sumto8(a,start,sum);
在对sumto8
的第二次调用中,您尚未注释掉=
。你有很多空白和注释代码。你也永远不会按照现在所有注释的方式调用isVisited()
函数,并且在sumto8
函数的末尾你最后有两个相同的return语句。如果你把它清理干净的话,如果你自己和这里的每个人都会有所帮助。