c/c++开发分享错过了使用递归查找总和的逻辑,得到了段错误

我试图实现以下使用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语句。 如果你把它清理一下,如果你自己和这里的每个人都会有所帮助。

      以上就是c/c++开发分享错过了使用递归查找总和的逻辑,得到了段错误相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/546021.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注