一、递归的特点:
1. 递归都在调用自身
2. 当调用自身的时候,是为了解决更小的问题
3. 存在某个足够简单的问题层次,这一层不需要调用自己就可以解决问题
二、有序数组二分法查找用递归实现
package com.solid.recursive;
public class BinarySearch {
private long[] arr;
private int nElems;
/**
* 构造方法
* @param maxSize
*/
public BinarySearch(int maxSize) {
arr = new long[maxSize];
nElems = 0;
}
/**
* 数组是否为空
* @return
*/
public boolean isEmpty() {
return (nElems == 0);
}
/**
* 向有序数组中插入元素
* @param key
*/
public void insert(long key) {
int i = 0;
for(i=0; i<nElems; i++) {
if(arr[i] > key)
break;
}
if(i == nElems) {
arr[i] = key;
nElems++;
} else {
for(int j=nElems; j>i; j--) {
arr[j] = arr[j-1];
}
arr[i] = key;
nElems++;
}
}
/**
* 递归取代二分法查找
*
*/
public int recSearch(long key, int lower, int upper) {
int curIn = (lower+upper)/2;
if(arr[curIn] == key ) {
return curIn;
} else {
if(lower > upper) {
return nElems;
} else {
if(arr[curIn] > key) {
return recSearch(key, lower, curIn-1);
} else {
return recSearch(key, curIn+1, upper);
}
}
}
}
/**
* 调用递归方法
* @param key
* @return
*/
public int find(long key) {
return recSearch(key, 0, nElems-1);
}
/**
* 显示数组元素
*/
public void display() {
for(int i=0; i<nElems; i++) {
System.out.print(arr[i] + " ");
}
}
}