C 递归函数不会返回 true

2024-04-17

我有一个搜索函数,它使用递归来执行数组的二分搜索,values[], for a value:

int recurseSearch(int value, int values[], int min, int max) {

    if (value > values[max] || min > max) return 1;

    int midpoint = (max+min)/2;

    if (values[midpoint] > value)
        //search in left
        recurseSearch(value, values, min, midpoint);

    else if (values[midpoint] < value)
        //search in right
        recurseSearch(value, values, midpoint, max);

    else if (values[midpoint] == value)
        return 0;

    else 
        return 2;

    return 3;
}

调用这个的代码只是简单地调用recurseSearch(value, values, 0, n);
为了验证起见,我将设置values[5]等于{3, 11, 32, 54, 66}, value to be 3(即这应该返回 0),并且n因此成为5.

所以这被称为:recurseSearch(3, values, 0, 5);

现在我希望它最终会返回并打印,0, since 3确实在数组中。调试后一切都很顺利,直到midpoint是 0,因此values[midpoint] == value是真的,所以return 0线路应该运行。然而,相反发生的事情是它确实发生了,但随后控制显然移到了最后(关闭})的函数,但然后返回并运行return 3;在线(此处)21。

我不明白为什么return 0语句不仅仅从函数中返回,为什么return 3根本不运行


注意:这个问题可以通过删除来解决return 3;行,但这会导致 clang 抱怨,并且运行命令 (make)我正在使用的,fatally有嘶嘶声,我宁愿避免这种情况


我没有仔细查看您的代码,因此其中可能存在其他错误,但听起来您希望将最深递归调用的返回值一直向上传递给调用者。在这种情况下,您将删除return 3;并简单地返回您正在进行的每个递归调用的值:

int recurseSearch(int value, int values[], int min, int max) {

    if (value > values[max] || min > max) return 1;

    int midpoint = (max+min)/2;

    if (values[midpoint] > value)
        //search in left
        return recurseSearch(value, values, min, midpoint);

    else if (values[midpoint] < value)
        //search in right
        return recurseSearch(value, values, midpoint, max);

    else if (values[midpoint] == value)
        return 0;

    else 
        return 2;
}

您最初编写代码的方式,递归调用的返回值被完全忽略,并且return 3;语句将被执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 递归函数不会返回 true 的相关文章

随机推荐