Java递归实现二分法,希望各位指点一下

/*
3.使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现
  */
  import java.util.Scanner;
  public class Recursion{
	  public static void main(String[]args)
	  {
		  System.out.println("请输入要找的整数");
		  Scanner sc=new Scanner(System.in);
		  int num = sc.nextInt();

		  int []a={1,2,3,4,5,6,7,8,9};
    	  int front = 0;
	      int end = a.length-1;
		  int mid = (front+end)/2;
          
		  //递归实现二分法
		 int index=findArray(a,front,mid,end,num);
		  if(index!=-1)
		  {
			  System.out.println("找到该数"+index);
		  }
		  else
		  {
			  System.out.println(index);
		  }
	 }
	 
	 public static int findArray(int[]b,int front,int mid,int end,int num)
	 {
		int index = -1;
		 if(front==end)
		 {
			if(b[mid]==num)
			{
				return mid;
			}
			else
			{
				return index;
			}
		 }
		  
		  else if(front<end)
		  {
		 
			if(b[mid]==num)
			{
				index = mid;
				return index;
			}
			else if(b[mid]>num)
			{
				end = mid-1;
				mid = (front+end)/2;

				return findArray(b,front,mid,end,num);
			}
			else if(b[mid]<num)
			{
				front=mid+1;
				mid=(front+end)/2;
			    
				return findArray(b,front,mid,end,num);
			 
			}

	    
		 }
		 //为什么下面的else需要注释掉,不注释掉编译会报错说缺少返回值
		   else
		   {
			   return index;
		    }
	  //  return index;

		 
  }
  }

为什么程序的报错,说else语句之后缺少返回值

时间: 2024-10-09 02:02:27

Java递归实现二分法,希望各位指点一下的相关文章

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

JAVA递归、非递归遍历二叉树(转)

原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c) { date = c; } // 先序遍历递归 public static void preOrder(BinTree t) {

携程函数、递归、二分法、import、from。。。import

携程函数 与yield类似 yield: 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器 2:与return功能类似,都可以返回值,但不同的是,return只能 返回一次值,而yield可以返回多次值 3:函数暂停与再继续运行的状态是有yield保存 def func(count): print('start') while True: yield count count+=1 g=func(10) print(g) print(next(g)) print(ne

欧几里得求最大公约数--JAVA递归实现

欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: 1 public class Demo0 { 2 public static void main(String[] args) { 3 4 System.out.println(gcd(24,120)); 5 } 6 7 8 public static int gcd(int p,int q){ 9 10 if(q==0)

java——递归调用

递归调用是调用自身的函数,并传给自身的相应的参数,这一运算过程是一层层的进行的,直到满足一定条件时,才停止调用. 递归函数的特点 1.函数要直接或间接调用自身. 2.要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数. 3.如果不满足递归终止的条件,则调用涉及递归调用的表达式.在调用函数自身时,有关终止条件的参数要发生变化,而且需向递归终止的方向变化. 举例: 计算5的阶乘? public class TestWudejiecheng { public static void m

JAVA递归删除目录及包含的全部文件

JAVA递归删除目录及包含的全部文件/** * 递归删除某一个目录 * @param objDir 目标目录文件 * @return 是否删除成功,true为成功 */ public static boolean deleteDir(File objDir) { if (objDir.exists()) { File[] dirs = objDir.listFiles(); for (int i = 0; i < dirs.length; i++) { if (dirs[i].isDirecto

Java中的二分法查找算法

[ 什么是二分查找 ]  二分查找又称为折半查找,该算法的思想是将数列按序排列,采用跳跃式方法进行查找,即先以有序数列的中点位置为比较对象, 如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分.以此类推不断缩小搜索范围. [ 二分查找的条件 ] 二分查找的先决条件是查找的数列必须是有序的. [ 二分查找的优缺点 ] 优点:比较次数少,查找速度快,平均性能好: 缺点:要求待查数列为有序,且插入删除困难: 适用场景:不经常变动而查找频繁的有序列表. [ 算法步骤描述 ] ①

字符串数组元素排列与组合的Java递归实现

排列与组合的Java递归实现 (参考) 我们在笔试面试过程中经常会遇到关于排列与组合的问题,其实这些可以通过递归简单的实现,看下面两个例子: (1)关于字符串排列的问题 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 可以这样想:固定第一个字符a,求后面两个字符bc的排列.当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面

三元表达式、递归、二分法、匿名函数、内置函数

三元表达式: def max2(x,y): if x>y: return x else: return y res=max2(10,11) print(res) x=10 y=11 三元表达式仅应用于: 1.条件成立返回一个值 2.条件不成立返回一个值 res=x if x>y else y print(res) def max2(x,y): return x if x>y else y print(max2(10,11)) 函数的递归.二分法 函数递归:函数的递归调用,即在函数调用的过