- 函数递归
(1)问题规模大–>划分小规模(如果没有规模,自己构建规模)
(2)函数自己调用自己
(3)函数退出条件 (防止死循环) - 基础练习题
1+1+1+…+1 n个1相加求和
public static int getSum(int n) {
if (n == 1) {
return 1;
}
return getSum(n - 1) + 1;
}
public static void main(String[] args) {
int result=getSum(5);
System.out.println(result);
}
}
求阶乘
public static int fac(int n){
//退出条件 递归深度
if(n == 1){
return 1;
}
return fac(n-1)*n;
}
public static void main(String[] args) {
int result=fac(5);
System.out.println(result);
}
斐波那契数列
public static int fabnic(int n){
if(n == 1 || n == 2){
return 1;
}
return fabnic(n-1)+fabnic(n-2);
}
public static void main(String[] args) {
int result=fabnic(5);
System.out.println(result);
}
二分查找之递归
public static int binarySearch0(int[] arr,int value,int begin,int end){
if(begin > end){
return -1;
}
int midIndex = ((end-begin)>>>1)+begin;
if(arr[midIndex] == value){
return midIndex;
}else if(arr[midIndex] > value){
return binarySearch0(arr,value,begin,midIndex-1);
}else{
return binarySearch0(arr,value,midIndex+1,end);
}
}
public static int binarySearch(int[] arr,int value){
//自己构建问题规模(查找的区间范围)
return binarySearch0(arr,value,0,arr.length-1);
}
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int result=binarySearch(arr,6);
System.out.println("下标位置在"+result);
}