递归的要点

递归算法

优点

递归是非常有效的算法实现形式,在小规模运算的情况下是很有效的,代码直观。

经典的二分查找算法的递归实现如下:

public static int rank3(int key ,int[] a){
     return rank3(key,a,0,a.length -1);
}
/**递归的要点:
* 1:递归总有一个最简单的情况,方法的第一句总是包含一个带条件的返回语句
* 2 递归调用总是收缩的,尝试解决一个规模更小的问题,这样递归才能收敛到最简单的情况
* 3:递归调用的父问题和尝试解决的子问题之间不应该有交集
*/
public static int rank3(int key,int[] a,int low,int hi){
     if(low>hi) return -1;
     int mid = low + (hi-low)/2;
     if(key>a[mid]){low = mid+1; return rank3(key,a,low,hi);}
     else if(key<a[mid]){hi = mid -1; return rank3(key,a,low,hi);}
     else {
       return mid;
     }
  }

 递归的缺点:

    递归主要利用栈内存进行计算,java 的栈内存是有限制的。可通过下面两个方式进行控制

public Thread(ThreadGroup group, Runnable target, String name,  
                  long stackSize) {  
    init(group, target, name, stackSize);  
}  

  当然也可以通过JVM启动参数来指定。XX:ThreadStackSize=<value>:设置线程的栈大小(字节数)(0表示 默认) [Sparc: 512, Solaris Intel: 256, Sparc 64bit: 1024 all others 0]

递归的优化 

    参见博客:http://www.cnblogs.com/wb-DarkHorse/archive/2013/11/15/3284228.html

 

 

 

你可能感兴趣的:(算法,递归)