**
递归函数的调用
**
递归实现
if => 递归的结束条件
else =>递推关系(隐含了一个规模的缩减)
递归实现二分搜索
public class test {
public static void main(String[] args) {
System.out.println("输入要查找的值:");
Scanner sc = new Scanner(System.in);
String inta = sc.nextLine();
Integer integer = new Integer(inta);
int [] arr=new int [11];
Random rd=new Random();
for (int i = 0; i < arr.length; i++) {
arr[i]=rd.nextInt(100);
}
Arrays.sort(arr);
int index=binarySearch(arr,integer);
System.out.println("index:"+index);
System.out.println(Arrays.toString(arr));
}
/**
* 递归实现二分查找
* @param arr
* @param
* @param
* @param data
* @return
*/
private static int binarySearch(int[]arr,int data){
return binarySearch(arr,0,arr.length-1,data);
}
/**
* 在arr数组中,从i到j范围的元素序列中,以二分查找的方式,找data值
* @param arr
* @param i
* @param j
* @param data
* @return
*/
private static int binarySearch(int []arr,int i,int j,int data){
if (i>j){
return -1;
}
int mid=(j-i+1)/2+i;
if (arr[mid]==data){//当前递归结束条件
return mid;
}
if (arr[mid]>data){//i<->mid-1范围内中data
return binarySearch(arr,i,mid-1,data);
}
else//mid+1<->j范围内中data
{
return binarySearch(arr,mid+1,j,data);
}
}}
递归实现斐波那契数列
public static void main(String[] args) {
System.out.println(fibonacci(10));
}
/**
* 求第n个斐波那契的值,用递归实现
* @param n
* @return
*/
private static int fibonacci(int n) {
if (n==1||n==2){
return 1;
}
return fibonacci(n-1)+fibonacci(n-2);
}
递归实现汉诺塔问题
public static void main(String[] args) {
hanoi(3,'A','B','C');
}
/**
* hanoi问题求解
* @param i 盘子个数
* @param a 起始的柱子
* @param b 借助的柱子
* @param c 目标的柱子
*/
private static void hanoi(int i, char a, char b, char c) {
if (i==1){
System.out.println(a+ "->"+c);
}else{
hanoi(i-1,a,c,b);
System.out.println(a+"->"+c);
hanoi(i-1,b,a,c);
}
}
}