C 递归函数不会返回 true

标签 c recursion return

我有一个搜索函数,它使用递归对数组 values[] 执行二分搜索,以获取 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 为为 3(即应返回 0),n 因此为 5

所以这被调用:recurseSearch(3,values, 0, 5);

现在我希望它最终返回并打印 0,因为 3 确实在数组中。调试后,一切进展顺利,直到 midpoint 为 0,因此 values[midpoint] == value 为 true,因此 return 0 线路应该运行。然而,实际发生的情况是它确实如此,但随后 comcontrol 显然移动到函数的末尾(关闭 }),但随后又向上移动并运行 return 3; 在线(此处)21。

我无法理解为什么 return 0 语句不只是从函数中返回,以及为什么 return 3 根本不运行

<小时/>

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

最佳答案

我没有仔细查看您的代码,因此其中可能存在其他错误,但听起来您希望将最深递归调用的返回值一直向上传递给调用者。在这种情况下,您可以删除 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; 语句。

关于C 递归函数不会返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656472/

相关文章:

c - 如何修复段错误?

java - 为什么这个递归循环等于 200?

jquery - 如何在我的插件之外创建可用的递归 jQuery 模板 (tmpl)?

java - 将文件的文本作为字符串返回?

c - 如果标准输出被调用 exec 的进程关闭,如何重新打开它

c - 在 C 中播放 mp3 文件

c - 'passing file descriptors between processes' 是如何工作的?

java - 搜索数组的递归方法不起作用

java - 返回数组列表对象 java 中的列表

c++ - 如何在 C++ 中返回我自己的结构?