理解递归C ++

时间:2016-03-08 15:27:04

标签: c++ recursion

.       *** *   |
***** * *** *** |
   *    *       |
 * * * ** **O** |
 *   *    *   * |
 ********** *** |
    * *       **|
**    * ** *    |

大家好,我刚刚开始学习递归,我很困惑,我的意思是,我有8x16的迷宫(忽略右侧的酒吧),迷宫的起始位置是你可以在迷宫中看到0,0,我必须从那里到达" O"在c ++中以递归方式指出,到目前为止我已经尝试过这个

bool Laberinto::findPath(int x,int y){

//outside limits bounds
if(x  <  0 || x > nRows || y < 0 || y > nCol)
    return false;

//if goal
if(x == goalRow && y == goalCol){
    updateLab();
    return true;
}

//if obstacle
if(matrix[x][y] == '*' || matrix[x][y] == 'X'){
    return false;
}

matrix[x][y] = '.';
updateLab();

//North checking
if(findPath(x-1,y) == true){
    return true;
}
//East checking
if(findPath(x,y+1) == true){
    return true;
}
//South checking
if(findPath(x+1,y) == true){
    return true;
}
//West checking
if(findPath(x,y-1) == true){
    return true;
}

matrix[x][y] = 'X';
updateLab();
return false;

}

updateLab()只是打印迷宫,事情就是它向东侧移动直到找到障碍物然后向南移动并停留在那里直到它崩溃,但是因为我刚刚开始要了解递归,我不知道我的错误发生在哪里

........*** *   |
***** *.*** *** |
   *    *       |
 * * * ** **O** |
 *   *    *   * |
 ********** *** |
    * *       **|
**    * ** *    |

1 个答案:

答案 0 :(得分:3)

您需要包含代码,以避免在您已经去过的路径上旅行。

if(matrix[x][y] == '.') /*....*/

可能发生的事情是你被困在彼此北方和南方的那两个点,因为你的代码进入一个无限循环,一遍又一遍地向北和向南移动。