簡體   English   中英

從遞歸返回(c / c ++)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM