向程序员靠近:自我学习记录-数据结构(2)【递归和查找】

递归和查找

二分查找

1、二分查找
对待搜索序列进行的每一次查找,如果没有查找到目标,就将带搜索序列折半,对其中一半的序列进行查找,直到找到目标元素在待搜索序列中的下标,将下标进行返回。
2、二分查找,查的是什么??
二分查找的搜索目标并不是目标元素本身,而是目标元素在待搜索序列中的下标。
二分查找的前提条件:待搜索序列的所有元素必须是有序的
3、二分查找代码实现

public int binarySearch(int[] array,int target){
	//定义搜索序列否起点下标,终点下标,中间下标
	int s=0;
	int e=array.length-1;
	int m=(s+e)/2;
	
	do{
		m=(s+e)/2;
		if(target<array[m]){
			e=m-1;
		}
		if(target>array[m]){
			s=m+!;
		}
		if(target==array[m]){
			return m;
		}
	}while(s<=e);

	return -1;
}

递归

递归调用
指的就是在同一个方法内部再次调用自己的过程,即大事化小;最小问题为递归出口,即小事化了。

死递归:没有递归出口或者永远执行不到。
eg:求1+2+3+…+n-1+n的和

public int add(int n){
	if(n==1){
		return 1;
	}else{
		return n+add(n-1);
	}
}

求n的阶乘

public int result(int n){
	if(n==1){
		return 1;
	}else{
		return n*result(n-1);
	}
}

斐波那契数列

public int fibonacci(int n){
	if(n==1||n==2){
	return 1;
	}else{
		return fibonacci(n-1)+fibonacci(n-2);
	}
}

在同一个递归方法中,递归调用和递归出口的数量不一定只有一个
使用递归实现的二分查找

public int dg(int[]array,int target,int start,int end){
	if(start>end){
	return -1;
	}
	int m=(start+end)/2;
	if(target<array[m]){
		return dg(array,target,start,m-1);
	}else if(target>array[m]){
		return dg(array,target,m+1,end);
	}else{
		return m;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值