c++栈溢出怎么解决?
报错的时候黄色箭头是指向 isLegal 方法,实在看不出来哪里错了啊还有这代码是解决 子集合问题的,用回溯法,请大神们看看那里错了?#include<iostream.h>int sum=0;int p=0;/*回溯法求解子集和数问题*/bool isLegal(int a[],bool c[],int n,int y,int k)//当前子集和是否达到标准{ sum+=a[k]; if((sum==y)&&(k<=n-1)) { for(int i=0;i<n;i++){ if(c[i]){ cout<<a[i]<<" "; } } cout<<endl; sum=0; p++; for(int h=0;h<n;h++){ c[h]=false; } return true; } else { sum-=a[k]; return false; }}bool isPart(int a[],bool c[],int n,int y,int k)//判断此元素是否可以加入子集{ sum+=a[k]; if((sum<y)&&(k<n-1)) { return true; } else { sum-=a[k]; return false; }}void partition(int A[],bool c[],int n,int y,int k){ /*回溯算法*/ while(k<n-1&&p<n-1) { if(isLegal(A,c,n,y,k)) { partition(A,c,n,y,p); break; } else if(isPart(A,c,n,y,k)) { c[k]=true; k++; partition(A,c,n,y,k); } while(c[--k]){ c[k]=false; sum-=A[k]; k--; if(k<p){break;} } while(!c[k]){ k--; if(k<p){break;} } sum-=A[k]; k++; partition(A,c,n,y,k); }}void main(){ int A[6]={10,20,30,40,50,60}; bool c[6]={0}; int k=0; for(int i=0;i<6;i++)//依次输出n个正数 cout<<A[i]<<" "; cout<<endl; partition(A,c,6,60,k);//调用函数partition() cin>>A[0];}