C递归函数不会返回true

时间:2016-04-15 20:41:40

标签: 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设置为5recurseSearch(3, values, 0, 5);

所以这被称为:0

现在我希望最终返回并打印3,因为midpoint确实在数组中。在调试之后,一切都很顺利,直到values[midpoint] == value为0,因此return 0为真,因此}行应运行。然而,相反的是它确实发生了,但随后comtrolly显然移动到函数的末尾(关闭return 3;),但随后向上移动并在线运行return 0(此处)21。

我无法理解为什么return 3语句不会退出函数以及为什么return 3;根本没有运行

N.B。删除make行可以解决此问题,但是这会导致clang抱怨,而且我正在使用的命令(function ToggleHistory(button) { console.log(button); var x = $(button).prev(); var y = $(button).closest('table').find('.trackingHistory'); //var z = $(button).closest('.trackingHistory'); console.log(x); console.log(y); console.log($(y).attr('id')); //console.log(z); } 致命一个混蛋,我宁愿避免

1 个答案:

答案 0 :(得分:1)

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