【发布时间】:2016-04-27 18:57:55
【问题描述】:
考虑场景:
int fun(node* a, node* b){
if(a == NULL && b == NULL) return 0;
if( (a->data == b->data) && (fun(a->left) == fun(b->left)) && (fun(a->right) == fun(b->right)) return 1;
return 0;
}
如果我们遇到了像 if a->data != b->data 这样的条件,那么会递归调用 (fun(a->left) == fun(b->left)) 和 (fun(a->right) == fun(b->right)) 还是直接对条件说 false?
【问题讨论】:
-
这与优化无关。 if 语句的求值语义是核心语言规则的基本部分。
-
这不是重复的,也不是在询问短路评估。当没有明确指定这些字段时,它会询问多个结构字段的递归比较。
-
它与
if语句无关,而是与逻辑运算符的评估有关。答案适用于任何情况。 -
if(a == NULL && b == NULL) return 0;包含逻辑错误。 -
@KerrekSB 嗯,每个人都会遇到这种情况。不过,它不应该太频繁。
标签: c if-statement recursion