0
点赞
收藏
分享

微信扫一扫

递归算法(二分查找)

爱情锦囊 2022-03-18 阅读 76

递归也算循环的一种。
递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把钥匙打开了几扇门。
循环:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门(若前面两扇门都一样,那么这扇门和前两扇门也一样;如果第二扇门比第一扇门小,那么这扇门也比第二扇门小,你继续打开这扇门,一直这样继续下去直到打开所有的门。但是,入口处的人始终等不到你回去告诉他答案。

递归三条件

1、明确递归终止条件;
2、给出递归终止时的处理办法;
3、提取重复的逻辑,缩小问题规模。

二分查找

二分查找也属于递归。二分查找适用于有序序列。
比如:3,6,8,15,17,19
现在需要查找15
先取中间值(舍弃余数):(0+5)/2=2 ,也就是中间值为8
15>8,所以从8的右侧开始形成一个新序列15,17,19
找新序列的中间值:(0+2)/2=1,中间值为17
15<17,所以从17的左侧开始形成一个新序列15
找新序列的中间值:(0+0)/2=0,中间值为15
15=15,查找结束

public static int recursionBinarySearch(int[] arr,int key,int low,int high){
		
		if(key < arr[low] || key > arr[high] || low > high){
			return -1;				
		}
		
		int middle = (low + high) / 2;			//初始中间位置
		if(arr[middle] > key){
			//比关键字大则关键字在左区域
			return recursionBinarySearch(arr, key, low, middle - 1);
		}else if(arr[middle] < key){
			//比关键字小则关键字在右区域
			return recursionBinarySearch(arr, key, middle + 1, high);
		}else {
			return middle;
		}	
		
	}

举报

相关推荐

0 条评论