为什么我的递归函数没有返回正确的值?

时间:2015-01-22 23:09:53

标签: c++ algorithm recursion

我正在实施二进制搜索,代码在下面,但是,它没有打印出正确的答案买它在功能体内打印出正确答案,所以这让我很困惑。

#include <iostream>
using namespace std;

int research(int a[], int target, int lowIndex, int highIndex)
{
    int finalIndex;
    cout << lowIndex << " " << highIndex << endl;
    int midIndex = (lowIndex + highIndex) / 2;
    if (a[midIndex] == target)
    {
        finalIndex = midIndex;
        cout << "The final index is: " << finalIndex << endl;
    }
    else
    {
        if (a[midIndex] < target)
        {
            research(a, target, midIndex + 1, highIndex);
        }
        else
        {
            research(a, target, lowIndex, midIndex - 1);
        }
    }
    return finalIndex;
}

int main()
{
    int* array = new int[1000];
    for (int i = 0; i < 1000; i++)
    {
        array[i] = i + 1;
    }
    cout << research(array, 234, 0, 999) << endl;
    return 0;
}

该行:

cout << "The final index is: " << finalIndex << endl;

打印出正确的最终索引,但行

cout << research(array, 234, 0, 999) << endl;

不是,而是打印出随机数。谁知道这里出了什么问题?谢谢!

1 个答案:

答案 0 :(得分:1)

实际将finalIndex设置为a[midIndex] == target的唯一时间是finalIndex,所以当你递归时,你会返回未初始化变量的值。

(函数调用之间不共享 if (a[midIndex] < target) { finalIndex = research(a, target, midIndex + 1, highIndex); } else { finalIndex = research(a, target, lowIndex, midIndex - 1); } 变量 - 每次调用都使用自己的变量。)

您需要使用递归调用的返回值:

{{1}}