У меня возникают проблемы с возвратом желаемого значения в рекурсивный вызов. Я хочу, чтобы он всегда возвращал 0, если не выполняется определенное условие, в этом случае он должен возвращать 1 и выйти.
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 в любой точке, тогда проверка должна равняться 1. В противном случае верните 0 и проверьте value = 0. Он завершает базовый обход, который, как я знаю, выполняется правильно и даже останавливается при завершающем условии (b [k * 4 + 4] == 1), но он не возвращает правильное значение.
В настоящее время он ВСЕГДА возвращает 0. Проверка всегда равна 0, хотя она останавливается после выполнения условия. Я также попытался удалить окончание return 0; хотя проверка все равно равна нулю...
Вам просто нужно проверить возвращаемые значения ваших рекурсивных вызовов, т.е.
return recursion(a, b, c, d, e, f);
Вам нужно выполнить return recursion(a, b, c, d, e, f);
вместо просто recursion(a, b, c, d, e, f);
, В противном случае результат этих рекурсивных вызовов будет потерян.
edit: чтобы не досрочно выйти из цикла, вы можете сделать это:
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;
}