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