c++ - 如何为未排序的分区搜索中断递归
问题描述
#include <iostream>
int find(int *a, int l, int r, int value)
{
if (l <= r)
{
int mid=(l + r) / 2;
if (a[mid] == value)
return mid;
find(a, l, mid-1, value);
find(a, mid+1, r, value);
}
return -1;
}
int main()
{
int a[30] = {1,3,5,7,9,12,25,56,90,81,101,
106,120,130,4,6,200,17,18,19,20,
12,456,4325,6507,59,69,58,384,299};
int size = 30;
int k = 3;
int pos = -1;
std::cout << "Can find " << k << " in position " << find(a, 0, size - 1, k) << "\n";
return 0;
}
我怎样才能打破递归?
这是未排序的分区搜索,但是当它发现答案递归时不会停止它会导致错误答案。
解决方案
您忘记在递归调用之前输入 return :
int find(const int *a,const int l,const int r,const int value)
{
if(l<=r)
{
const int mid=(l+r)/2;
if(a[mid]== value)
return mid;
const int result = find(a,l,mid-1,value);
if (result == -1)
return find(a,mid+1,r,value);
else
return result;
}
return -1;
}
但在这种情况下,您的搜索将始终先搜索左侧,这与线性搜索完全相同。
推荐阅读
- laravel - 获取 Auth Laravel 数据以使用 Vue 填充
- c# - WPF 中用户控件的输入和输出
- javascript - 使用 GET curl PHP 显示 Javascript 值
- ios - 如何在快速向 alamofire 发送请求之前安排数组
- oracle - ORA-12899错误相同列的字符串太大但不同的表成功
- android - RxJava observeOn 似乎无法正常工作
- angular - 在 Mat 分页器 pageOptions 中不起作用
- c# - 如何在 C# 中使用 LINQ 按位数对整数进行分组
- mysql - 2个不同SQL表中表1到表2的数据列
- django - 模板未显示上下文变量