我遇到了这段代码,但我无法理解递归如何适用于以下代码,因为在return
语句中使用了一个布尔OR运算符,这是我以前从未见过的。它应该如何运作?
bool match(char *first, char * second)
{
if (*first == '\0' && *second == '\0')
return true;
if (*first == '*' && *(first+1) != '\0' && *second == '\0')
return false;
if (*first == '?' || *first == *second)
return match(first+1, second+1);
if (*first == '*')
return match(first+1, second) || match(first, second+1); //How does it work?
return false;
}
答案 0 :(得分:4)
它像所有其他分离一样:
首先评估左侧match(first+1, second)
如果是true
,则整个表达式的结果为true
,并且不评估任何其他内容
如果是false
,则评估右侧match(first, second+1)
,这将成为整个表达式的结果。
答案 1 :(得分:1)
布尔运算符||
和&&
的一个重要特征是short-circuit evaluation。这意味着在||
的情况下,如果第一个电话match(first + 1, second)
返回true
,则不会进行第二次通话,并且会返回true
。否则返回值是第二次调用的返回值。
答案 2 :(得分:0)
它主要用于为变量分配return
的参数,然后返回该变量。唯一的区别是,编译器可能会返回值优化。