第1个回答 2014-04-12
if(m%fac==0) //先检查 m
dfs(n,m/fac,fac-1);
if(n%fac==0) //不管m成不成立,都会再次检查n
dfs(n/fac,m,fac-1);
if(m%fac==0) //先检查 m
dfs(n,m/fac,fac-1);
else if(n%fac==0) //加个else, 如果m不成立,才会检查n
dfs(n/fac,m,fac-1);
第2个回答 2014-04-12
不是,if语句下边如果不加花括号{},那么他默认的是他下一行的内容在他的语句块内,
也就是你那个等价于:
if(m%fac==0)
{
dfs(n,m/fac,fac-1);
}
if(n%fac==0)
{
dfs(n/fac,m,fac-1);
}
所以都会执行的,如果想按你说的那样做,应该是这样
if(m%fac==0)
dfs(n,m/fac,fac-1);
else
{
if(n%fac==0)
dfs(n/fac,m,fac-1);
}
这样满足m%fac==0的话第二个if不会执行,但是不满足的话第二个if还是会执行的。
第3个回答 2014-04-12
这个需要判断 n%fac==0 是否满足,如果满足就执行语句,如果不满足,就不执行了。
这两个if是独立的,不相互影响的
第4个回答 2014-04-12
那要看你第一个if语句是否包含第二个if语句,若包含,那么第一个if语句条件成立时,就是m%fac==0时,执行整个语句,若不包含,第一个if语句判断完毕之后,再判断第二个语句是否成立。
我看不出第一个语句是否包含第二个语句。建议格式:
if(m%fac==0)
{
dfs(n,m/fac,fac-1);
}//第一个语句结束处
if(n%fac==0)
{
dfs(n/fac,m,fac-1);
}第二个语句结束处
或者
if(m%fac==0)
{
dfs(n,m/fac,fac-1);
if(n%fac==0)
{
dfs(n/fac,m,fac-1);
}第一个语句结束处
}第二个语句结束处
手打