递归如何适用于以下代码,因为在return语句中使用了布尔OR运算?

时间:2016-06-28 13:05:21

标签: c++ recursion

我遇到了这段代码,但我无法理解递归如何适用于以下代码,因为在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;
}

3 个答案:

答案 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的参数,然后返回该变量。唯一的区别是,编译器可能会返回值优化