由于在返回语句中使用了布尔或操作,因此递归如何对以下代码工作

How does recursion work for the following code, since a Boolean OR operation is used in the return statement?

本文关键字:递归 工作 代码 操作 语句 返回 布尔      更新时间:2023-10-16

我遇到了这段代码,但是我无法理解下面代码的递归是如何工作的,因为在return语句中使用了一个布尔或运算符,这是我以前从未见过的。它是怎么工作的?

bool match(char *first, char * second)
{
    if (*first == '' && *second == '')
        return true;
    if (*first == '*' && *(first+1) != '' && *second == '')
        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;
}

它像所有其他析取一样工作:

首先求左边的match(first+1, second)
如果是true,则整个表达式的结果为true,不计算其他值。
如果是false,则计算右边的match(first, second+1),这就成为整个表达式的结果。

布尔运算符||&&的一个重要特征是短路求值。这意味着在||的情况下,如果第一次调用match(first + 1, second)返回true,则不会进行第二次调用,并且将返回true。否则返回值为第二次调用的返回值

它的工作原理就好像一个变量被分配了return的参数,然后该变量返回。唯一的区别是,编译器可能会做返回值优化