我正在实施二进制搜索,代码在下面,但是,它没有打印出正确的答案买它在功能体内打印出正确答案,所以这让我很困惑。
#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;
不是,而是打印出随机数。谁知道这里出了什么问题?谢谢!
答案 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}}