递归:在定义自身的过程中,直接或间接调用自身的一种算法
最简单的递归示例:
阶乘
求n!
分析:
n!等价于 n(n-1)!
这是一个典型的递归算法题
public int recursion(int n){
if(n==0){
return 1;
}else{
return n*recursion(n-1);
}
}
/*
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
分析:
其实这就是Fibonacci(斐波拉契)数列的求解问题,当前项等于前两项之和。也是典型的递归算法
public int function(int n){
if(n<=0){
return 0;
} else if(n==1 || n=2){
return 1;
}else{
return function(n-2)+function(n-1);
}
}
至此递归的两个经典算法题就算解决!
大部分算法题都是源于数学!
二分查找算法
public int binarySearch(int[] data, int left, int right,goal){
int mid=(left+right)/2;
if(left>right){
return -1;
}
if(goal==dta[mid]){
return goal;
}else if(goal>data[mid]){
return binarySearch(data, mid+1, right,goal);
}else if(goal<data[mid]){
return binarySearch(data,left,mid-1,goal);
}else{
return -1;
}
}
//测试
public static void main(String[] args) {
int[] arr = {4,3,5,2,0,8};
//先排序
Arrays.sort(arr);
//注意这里是数组下标
int result = binarySearch(arr, 0, arr.length-1, 100);
System.out.println(result);
}
二分查找算法还有其他思路,以后再补充