一个这么简单的代码居然掰扯了好久,分析判断了好一会才发现了问题所在。
void search(int start, int end)
{
if (end - start > 0)
{
int mid = (end + start) / 2;
if (num[mid] == k)
{
flag = 1;
}
if (num[mid] > k)
{
search(start, mid);
}
if (num[mid] < k)
{
search(mid+1, end);
}
}
return;
}
要么就这么写,用if判断一下还能不能再往下走;要么就:
void search(int start, int end)
{
while(end - start >= 0)
{
int mid = (end + start) / 2;
if (num[mid] == k)
{
flag = 1;
return ;
}
if (num[mid] > k)
{
end = mid - 1;
}
if (num[mid] < k)
{
start = mid + 1;
}
}
return;
}
要么就用while语句循环,并不断更新start和end的值。
说实话感觉前者更加符合递归分治的定义。
而我,把这俩给混在一起了,又用while又函数嵌套......菜就多练