没有基本情况的递归和递归函数后的语句

时间:2016-07-06 12:28:40

标签: c++ recursion

如果没有基本情况,递归后的语句是什么时候?

              void fun(int x,int y){
               statement 1;
               statement 2;
               fun(x',y');
               statement 3;
               statement 4;
               }

这里语句1和2不是基本情况。如果每次递归都将控制权发送回递归函数,那么语句3和4何时执行?

我的问题是参考这段代码https://ideone.com/lEKxW5。在我给出的链接中,何时是第24行之后的语句或者说在递归执行之后?

             LOOK AT THE LINK OF THE CODE BEFORE ANSWERING .


               void dfsBipartiteColor(int x, int y, int c)
              {
               // If we got to paint the cell:
                  if ( (board[x][y] == 'X') && (color[x][y] == -1) ) {
                   // Color it:
                  color[x][y] = c;
                   // Special case: We have foudn that there is at least one X:
    result = std::max(result, 1);

    // Try the adjacent hexagons:
    for (int nx = max(0, x-1); nx <= min(n-1, x+1); nx++) {
        for (int ny = max(0, y-1); ny <= min(n-1, y+1); ny++) {
            // The hexagon is adjacent and has an X:
            if ( (nx - x != ny - y) && (board[nx][ny] == 'X') ) {
                // continue the DFS, negate the color:
                dfsBipartiteColor(nx,ny, !c);// 
                // Special case: We now know there are two adjacent X:
                result = std::max(result, 2);
                // If the color is not consistent, the graph is not bipartite: 
                if (color[nx][ny] == c) {
                    result = 3;
                }
            }
        }
    }
}

在上面的代码中执行递归后的语句是什么时候?

3 个答案:

答案 0 :(得分:3)

您已经过多地简化了代码,还有一个条件:

void fun(int x,int y){
    statement 1;
    statement 2;
    if(condition) fun(x',y');
    statement 3;
    statement 4;
}

因此,当条件不满足时,调用将返回。

答案 1 :(得分:1)

基本情况似乎是不可见的,因为它不会做任何事情,并且在条目条件为假时发生 (当你简化时,你省略了进入条件。)

尽可能简化您发布的代码:

void function()
{
    if (condition)
    {
        function();
        statement;
    }
}

如果仍然看不到基本情况,请考虑等效的

void function()
{
    if (condition)
    {
        function();
        statement;
    }
    else
    {
        // Do nothing.
    }
}

答案 2 :(得分:0)

它们将永远不会被执行,并且由于无限递归,程序会在堆栈空间耗尽时很快崩溃。