如果没有基本情况,递归后的语句是什么时候?
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;
}
}
}
}
}
在上面的代码中执行递归后的语句是什么时候?
答案 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)
它们将永远不会被执行,并且由于无限递归,程序会在堆栈空间耗尽时很快崩溃。