C++ 停止递归算法

C++ 停止递归算法,c++,recursion,permutation,C++,Recursion,Permutation,有10个数字必须满足以下等式: (a[0]+a[1]+a[3]+a[4])=S (a[9]+a[0]+a[7]+a[8])=S (a[2]+a[1]+a[9]+a[8])=S (a[2]+a[3]+a[5]+a[6])=S (a[8]+a[7]+a[5]+a[4])=S 我将10个数字放在一个数组中,通过使用递归置换算法,我试图找到所有可能的置换,以检查这些数字是否满足上述方程。 一旦找到正确的排列,我希望程序返回true并停止生成其他排列。这是代码,但它总是返回false。 例如,对于数字1,

有10个数字必须满足以下等式:

(a[0]+a[1]+a[3]+a[4])=S

(a[9]+a[0]+a[7]+a[8])=S

(a[2]+a[1]+a[9]+a[8])=S

(a[2]+a[3]+a[5]+a[6])=S

(a[8]+a[7]+a[5]+a[4])=S

我将10个数字放在一个数组中,通过使用递归置换算法,我试图找到所有可能的置换,以检查这些数字是否满足上述方程。 一旦找到正确的排列,我希望程序返回true并停止生成其他排列。这是代码,但它总是返回false。 例如,对于数字1,2,3,4,5,6,8,9,10,12和S=24,我们有一个asnwer:1,8,2,12,3,6,4,10,5,9 但是算法还是返回false

bool permute(int *array,int i,int length, int S) { 


  if (length == i){

    if( check( array, S) )
            return true;
        else
        return false;   

  }
  int j = i;
  for (j = i; j < length; j++) { 
     swap(array+i,array+j);
     if( check( array, S) )
            return true;
     permute(array,i+1,length, S);


     swap(array+i,array+j);
     if( check( array, S) )
            return true;
  }

  return false;
}

bool check( int* a, int S){
    if((a[0]+a[1]+a[3]+a[4]) ==S && (a[9]+a[0]+a[7]+a[8]) ==S && (a[2]+a[1]+a[9]+a[8]) ==S && (a[2]+a[3]+a[5]+a[6]) ==S && (a[8]+a[7]+a[5]+a[4]) ==S)
            return true;

    return false;
}
boolpermute(int*数组,int i,int长度,int S){
如果(长度==i){
如果(检查(数组)
返回true;
其他的
返回false;
}
int j=i;
对于(j=i;j
您必须处理退货状态。
permute(数组,i+1,长度,S)返回一个状态-检查它是否为真,在这种情况下返回:

if(排列(数组,i+1,长度,S))返回true

您必须处理退货状态。
permute(数组,i+1,长度,S)返回一个状态-检查它是否为真,在这种情况下返回:
if(排列(数组,i+1,长度,S))返回true