c语言中if..... if......if....与if....else if.....else if....的区别

各位大神们小白向您请教。
在编写老鼠走迷宫的程序时
这个
int visit(int i, int j) {
maze[i][j] = 1;
if(i == endI && j == endJ)
success = 1;
if(success != 1 && maze[i][j+1] == 0) visit(i, j+1);
if(success != 1 && maze[i+1][j] == 0) visit(i+1, j);
if(success != 1 && maze[i][j-1] == 0) visit(i, j-1);
if(success != 1 && maze[i-1][j] == 0) visit(i-1, j);
if(success != 1)
maze[i][j] = 0;
return success;

为什么和下面的代码不等价???(本人亲自实验过)
int visit(int i, int j) {
maze[i][j] = 1;
if(i == endI && j == endJ)
success = 1;
if(success != 1 && maze[i][j+1] == 0) visit(i, j+1);
else if(success != 1 && maze[i+1][j] == 0) visit(i+1, j);
else if(success != 1 && maze[i][j-1] == 0) visit(i, j-1);
else if(success != 1 && maze[i-1][j] == 0) visit(i-1, j);
if(success != 1)
maze[i][j] = 0;
return success;

当x=10的时候
if x>4
if x>2
if x>0
每一个都要执行(每一个if 是独立的)

if x>4
else if x >2
else if x>0
else
只执行第一个 (这个每一个if 是互斥的,某个满足,就不会判断后面的)
有时候下面这种可以简化成上面的,比如 if x==4 else if x==3
因为这样的条件本身就是互斥的,不会同时满足,改成if if ,也只会进一个分支,区别只是判断的次数而已,不影响流程。

你的程序性中,如果上面没走过……
如果下面没走过……
如果左边没走过……
如果右边没走过……

如果上面没走过……
如果上面走过,左边没走过……
如果上面和左边都走过,下面没走过……
如果上,左,下都走过,右边没走过……
明显是不一样的

if(success != 1 && maze[i][j+1] == 0)
{
visit(i, j+1);
}
else
{
if(success != 1 && maze[i+1][j] == 0)
visit(i+1, j);
else
{
if(success != 1 && maze[i][j-1] == 0)
visit(i, j-1);
else
{
if(success != 1 && maze[i-1][j] == 0)
visit(i-1, j);
}

}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-25
赞成 if..... if......if....每句都会执行到
if....else if.....else if....一旦中间有一个if判断为true而进入了,后面的if不会再进行判断
就是这样。
第2个回答  2012-09-25
if..... if......if....每句都会执行到
if....else if.....else if....一旦中间有一个if判断为true而进入了,后面的if不会再进行判断
第3个回答  2012-09-25
你这种情况不等价的原因是 visit 函数会改变 if 条件中的变量,即 maze 数组。
如果多个if中执行的代码不会修改后续if的条件变量,那么加上else是等价的,否则不等价。
第4个回答  2012-09-25
前面的写法,有可能多个IF都执行,但是后面的写法就只会执行一个。。有问题可以百度HI讨论。。
相似回答