[英]Return from Recursion (c/c++)
我在遞歸調用中無法返回期望的值。 我希望它總是返回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是否在任何點上,然后check應該等於1。否則,返回0並check will =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);
。 否則,這些遞歸調用的結果將丟失。
編輯:不要過早退出循環,可以執行以下操作:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.