2013-11-26 54 views
0

我无法在递归调用中返回所需的值。我希望它总是返回0,除非满足某些条件,那么它应该返回1并退出。递归返回(c/C++)

int check = recursion(a, b, c, d, e, f); 
int recursion(int *a, int *b, int c, int d, int e, int f){ 
    int k, dX, dY; 
    for(k=0;k<=b[1]-1;k++){ 
     dX = b[k*4+3] - e; 
     dY = b[k*4+2] - f; 
     if(((dX == 1 || dX == -1) && (dY == 0))){ 
      if(b[k*4+4] == 1) return 1; 
      e = b[k*4+3]; 
      f = b[k*4+2]; 
      b[k*4+2] = b[k*4+3] = 0; 
      recursion(a, b, c, d, e, f); 
     } 
     if(((dY == 1 || dY == -1) && (dX == 0))){ 
      if(b[k*4+4] == 1) return 1; 
      e = b[k*4+3]; 
      f = b[k*4+2]; 
      b[k*4+2] = b[k*4+3] = 0; 
      recursion(a, b, c, d, e, f);  
     } 
    } 
    return 0; 
} 

许多不相关的信息已被删除,但你可以看到,如果B [K * 4 + 4] == 1在anypoint,检查应则等于1,否则返回0并检查将= 0.它完成了一个基本遍历,我知道它正确地完成,甚至停止在终止条件(b [k * 4 + 4] == 1),但它没有返回正确的值。

目前,总是返回0.检查总是等于0,尽管一旦满足条件它会停止。我也尝试删除结尾返回0;虽然检查仍然等于零......

+0

我知道,我可以通过一个指针,用于检查和简单的集检查= 1,然后返回。我可以证实,这**做**工作,但希望有一个更清晰的方式来做到这一点与回报。 –

回答

1

你只需要检查你的递归​​调用,即返回值,

return recursion(a, b, c, d, e, f); 
+0

这打破了遍历,它没有完成。 –

0

你需要做return recursion(a, b, c, d, e, f);,而不是仅仅recursion(a, b, c, d, e, f);。否则,这些递归调用的结果将会丢失。

编辑:不要过早地退出你的循环,你可以这样做:

int check = recursion(a, b, c, d, e, f); 
int recursion(int *a, int *b, int c, int d, int e, int f){ 
    int k, dX, dY; 
    for(k=0;k<=b[1]-1;k++){ 
     dX = b[k*4+3] - e; 
     dY = b[k*4+2] - f; 
     if(((dX == 1 || dX == -1) && (dY == 0))){ 
      if(b[k*4+4] == 1) return 1; 
      e = b[k*4+3]; 
      f = b[k*4+2]; 
      b[k*4+2] = b[k*4+3] = 0; 
      if(recursion(a, b, c, d, e, f) == 1) 
       return 1; 
     } 
     if(((dY == 1 || dY == -1) && (dX == 0))){ 
      if(b[k*4+4] == 1) return 1; 
      e = b[k*4+3]; 
      f = b[k*4+2]; 
      b[k*4+2] = b[k*4+3] = 0; 
      if(recursion(a, b, c, d, e, f) == 1) 
       return 1; 
     } 
    } 
    return 0; 
} 
+0

这打破了遍历,它没有完成。 –

+0

你仍然需要找到一种方法来使用你的递归调用。目前你所做的只是调用函数,然后放弃返回,这实际上是无用的。也许你想设置一个有条件切换为1的标志,那么你可以在你的函数结束时返回这个标志? –

+0

这很有道理。使用通过未来呼叫并在退出时返回的标志将起作用。感谢@红色警报! –