使用递归解决二分查找(力扣704题)

先谈一下什么是递?什么是归?
递:深入到最里层叫递
归:从最里层出来叫归

递归的含义?

(1)每次调用自己,如果说每个函数对应着一种解决方案,自己调用自己意味着解决方案是一样的(按我理解就是俄罗斯套娃)
(2)每次调用,函数处理的数据较上次缩减,而且最后会缩减至无需继续递归(简单来说就是规模缩减)
(3)内层函数调用完成,外层函数才能算调用完成

//举个单链表递归遍历的例子
void f(Node node){
	if(node == null) { //node == null 是递归的结束条件
		return;
	}
	println(node.value)
	f(node.next);
	}
	/**
	代码只是便于你理解,你可以试一下把f(1),f(2),f(3)代入
	它的内部可以说是循环套娃
	*/

先来看看普通方法来解决二分查找

(题目先摆上)

在这里插入图片描述

class Solution {
    public int search(int[] nums, int target) { //target是待查找值
        int i=0,j=nums.length-1;  //i是左边界,j是右边界
        while(i <= j){
            int m = (i+j)/2;
            if(target == nums[m]){
                return m;
            }else if(target < nums[m]){
                j = m - 1;
            }else {
                i = m + 1;
            }
        }
        return -1;
    }
}

使用递归来解决二分查找

class Solution {  //用递归来做
    public int search (int[] arr, int target) {
        return f(arr,target,0,arr.length-1);
        
    }
    public static int f(int[] arr, int target,int i,int j) {
        if(i>j){
            return -1;
        }
        int m = (i+j)>>>1;
        if(target<arr[m]){
            return f(arr,target,i,m-1);
        }else if(target>arr[m]){
            return f(arr,target,m+1,j);
        }else{
            return m;
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值