递归实现:

自己写的递归:多一个赋值操作,虽然可以得到正确的结果。但是比较难以理解。

问题:没有深刻理解递归返回值。return会在递归调用到最后,在递归结束的地方,会将返回值一层一层返回给方法,直到返回最后一层也就是方法不进行递归演算的动作时。

总结:首先要记住递归有递归头和递归体,递归头可能有多重情况。递归体也可能有多重情况。

        public static int binarySearch(int[] arr,int n){int low=0;int high=arr.length-1;return binarySearch2(arr,low,high,n);}public static int binarySearch2(int[] arr,int low,int high,int n){int z=(low+high)/2;int i=-1;if(low<=high){if(arr[z]==n ){return i=z;}else{if(arr[z]>n){high=z-1;}else if(arr[z]<n){low=z+1;}return binarySearch2(arr,low,high,n);}}return i;}

网友的递归:

没有找到对应值,递归结束会走对应的递归头

找到对应值,递归结束走对应递归头

         public static int binarySearch(int[] arr,int low,int high,int n){int mid=(low+high)/2;if(low>high){return -1;}if(arr[mid]==n){return mid;}else if(arr[mid]>n){return binarySearch(arr,low,mid-1,n);}else{return binarySearch(arr,mid+1,high,n);}}

非递归实现:

总结:第一次写low+high/2的地方没有加括号,结果导致数组索引越界:3,正确的写法(low+high)/2 

public static int binarySearch(int[] a,int low,int high,int n){while(low<=high){int mid=(low+high)/2;if(a[mid]==n){return mid;}else if(a[mid]>n){high=mid-1;}else{low=mid+1;}}return -1;
}

  

转载于:https://www.cnblogs.com/huiandong/p/10983205.html

二分查找递归和非递归方法分析相关推荐

  1. 二分查找递归与非递归的时间比较_我们说一说Python的查找算法!

    相信大家在面试开发岗和算法岗时,评委最喜欢问的就是:您能给我说一下查找和排序算法有哪些?今天咱们就说一说Python中最常用的查找算法,下期我们再推出排序算法. 首先要明白查找是查什么?我们希望能给定 ...

  2. 二分查找递归与非递归方式的实现

    如下为代码 package system.test1; import java.util.Arrays; public class ytest {public static void main(Str ...

  3. 算法006:二分查找 递归、非递归

    题目: 已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1思路: 递归和非递归 1.代码如下 BinSearch .java: package com.yuhl.right;/*** ...

  4. 二分查找-递归和非递归

    一 概述 二分查找是一种查询效率非常高的查找算法 又称折半查找 二 条件 查找内容需满足: 1.为顺序结构 2 必须按关键字大小有序排列 优点是比较次数少,查找速度快,平均性能好: 其缺点是要求待查表 ...

  5. C语言二分查找递归与非递归实现

    折半查找也成二分查找,它是一种效率较高的查找方法.但是,二分查找要求线性表必须采用顺序存储结构,而且表中元素需按关键字有序排列,以下内容均设有序表是递增有序的. 查找过程:首先,假设表中元素是按升序排 ...

  6. 二分查找 递归与非递归实现

    二分查找将一个有序数组查找的时间复杂度从O(n)降到了O(logn). 首先是最基本的二分查找: public int binarySearch(int[] arr, int target, int ...

  7. c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...

  8. php+求二分查找递归算法,PHP二分查找(递归和循环)

    二分查找可以通过递归和循环来实现, 思路如下: 将要查找的数和中间数进行比较, 如果相等,则表示找到,返回下标 如果要查找的数小于中间这个数,则说明要查找的数分布在数组左边,修改right边界,使其等 ...

  9. (C语言)BinarySearch二分搜索/折半查找 --- 递归、非递归

    1 /*2 * FILE: BinarySearch.C3 * DATE: 201803064 * ==============5 * DESCRIPTION: 折半查找_递归.非递归实现6 * 二分 ...

最新文章

  1. 解决foxmail提示“can not open socket WinSock Error:10106”
  2. C语言程序练习-L1-017 到底有多二 (15分)
  3. MongoDB学习目录
  4. 操作系统课设之Linux 进程管理
  5. 计算机网络教程三次握手,计算机网络(二) TCP协议的三次握手
  6. “女神节”男性送礼热门商品榜:“求生欲”极强!
  7. RAX,eax,ax,ah,al 关系
  8. 阿里内部平台VS火山引擎后端开发,拿头比?
  9. 使用PHP来简单的创建一个RPC服务
  10. Zabbix离线安装部署
  11. ElasticSearch服务器的搭建与使用
  12. 关于微信无法登陆网页版的问题
  13. “离职同事在工作群抢红包被踢”:学会退群,是职场人的基本修养
  14. 爬虫 爬取豆瓣高分电影信息
  15. Python制作个税计算器
  16. 做后端php和java区别,【后端开发】php和java有什么区别
  17. 7-38 寻找大富翁 (25 分)
  18. Android性能优化之图片压缩综合解决方案
  19. 面试官:HTTP协议你知道多少?
  20. unresolved external symbol __imp__timeGetTime@0

热门文章

  1. dev中文本框等获取焦点事件
  2. Asp.net MVC模型数据验证扩展ValidationAttribute
  3. MySQL中CREATE DATABASE和CREATE SCHEMA区别(转)
  4. 5-python学习——条件语句
  5. 程序员福利各大平台免费接口,非常适用
  6. hadoop2.2.0 core-site.xml--security properties
  7. 删除.svn文件夹方法(转)
  8. 重构机房收费系统(一)
  9. [USACO] Beef McNuggets
  10. 项目进行JVM调优 Jconsole