Java学习资料-Java常用算法-递归算法

Fact源程序

public class Fact {

 public static int binarySearch(int[] dataset ,int data) 

 { 

 int beginIndex = 0;     //定义起始位置

 int endIndex = dataset.length - 1;  //定义结束位置

 int midIndex = -1;      //定义中点

 if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){ 

 return -1;        

 //用二分法查找的数据必须是排好序的,因此只要比较第一个元素和最后一个元素就可以确定所查找的数据是否在数组中 

 } 

 while(beginIndex <= endIndex) { 

 midIndex = (beginIndex+endIndex)/2;//初始化中点 

 if(data <dataset[midIndex]) { 

 endIndex = midIndex-1; //如果查找的数据小于中点位置的数据,则把查找的结束位置定义在中点

 } else if(data>dataset[midIndex]) { //如果查找的数据小于中点位置的数据,则把查找的起始位置定义在中点

 beginIndex = midIndex+1; 

 }else { 

 return midIndex; //返回查找到的数据的位置

 } 

 } 

 return -1; 

 } 

 public static void main(String[] args) {

  int[] test1 = { 38,48,59,61,72,99,101 }; // 测试数组

   System.out.print("你查找的数据位置在:"+Example1_6.binarySearch(test1,59));

 }

}

}

3.1.1.2 程序运行结果:
n=2 x=1
n=1 x=0
n=0
fact(x)->x=0
fact(x)->x=1
fn=2

3.1.2 源程序揭秘
程序调用自身的编程技巧称为递归( recursion)。   一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

       (1) 递归就是在过程或函数里调用自身。
  (2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。
  (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
  (4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。

你可能感兴趣的:(Java学习资料-Java常用算法-递归算法)