递归实现二分查找

死咸鱼的成长之路 2017-10-01 06:22:05
int Tree::TwoPointSerachRecursion(int arr[],int l,int r,int temp)
{
int mid;
mid = (l+r)/2;
if( l > r )
return -1;
if(arr[mid] == temp)
return mid;
else if(temp < arr[mid])
TwoPointSerachRecursion(arr,0,mid-1,temp);
else
TwoPointSerachRecursion(arr,mid+1,r,temp);
}

int Tree::TwoPointSerachRecursion(int arr[],int l,int r,int temp)
{
int mid;
mid = (l+r)/2;
if( l > r )
return -1;
if(arr[mid] == temp)
return mid;
else if(temp < arr[mid])
return TwoPointSerachRecursion(arr,0,mid-1,temp);
else
return TwoPointSerachRecursion(arr,mid+1,r,temp);
}
这是一个二分查找的递归方法 两段代码递归函数前面加return 和不加的结果是一样的 但是有什么区别呢 ? 请大佬解答。
...全文
202 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zycxnanwang 2017-10-02
  • 打赏
  • 举报
回复
我第一眼就认为第一个方法是错误的,因为其如果不是mid是没有返回值的,或者是零 但是我自己试了一下, 如果不加return 0,尽然c++会自动返回调用函数的值(相当于加了return),可怕。。 我建议你还是考虑第二种。

#include<iostream>
using namespace std;

int binarySearchOne(int arr[],int l,int r,int temp)
{
	int mid;
	mid = (l+r)/2;
	if( l > r )
	return -1;
	if(arr[mid] == temp)
	return mid;
	else if(temp < arr[mid])
	 binarySearchOne(arr,0,mid-1,temp);
	else
	 binarySearchOne(arr,mid+1,r,temp);
	
	return 0;
}

int binarySearchTwo(int arr[],int l,int r,int temp)
{
	int mid;
	mid = (l+r)/2;
	if( l > r )
		return -1;
	if(arr[mid] == temp)
		return mid;
	else if(temp < arr[mid])
	 	return binarySearchTwo(arr,0,mid-1,temp);
	else
	 	return binarySearchTwo(arr,mid+1,r,temp);
}

int main() {
	int a[] = {1, 2, 3, 4, 5, 6};
	cout << binarySearchOne(a, 0, 5, 6) << endl;
	cout << binarySearchTwo(a, 0, 5, 6) << endl;
}

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧