递归的思想与理解
什么是递归;
按我自己的理解递归就是同一个函数的循环运行。
1、找重复
找到一种划分方法
找到递推公式或者等价转接都是父问题转化为求解子问题
2、找变化的量
变化的量通常要作为参数
3、找出出口
找到边界值
两种固定的递归;
斐波那契数列:
static int fib(int n){
if (n ==1 || n == 2)
return 1;
return fib( n: n - 1)+ fib( n: n - 2);
最大公约数:
static int gcd(int m,int n){
if (n==0)
return m;
return gcd(n,n: m%n);
递归的运用-三种排序与冒泡排序的比较;
1、递归形式的插入排序:
static void insertSort(int[]arr,int k){
if(k==0){
return;
}
insertSort(arr,k: k-1);
int x = arr[k];
int index = k-1;
while(x<arr[index]){
arr[index+1]= arr[index];
index--;
}
arr[index]==x;
2、二分排序:
function binarySearch(data,dest, start,end){
var end = end || data. length- 1,
start = start || 0,
m= Math.floor((stant + end) / 2);
if(data[m] == dest){
return m;
}
if(dest < data[m]){
return binarySearch(data, dest,0, m- 1);
}else {
return binarySearch(data, dest, m+ 1,end);
}
return false;
}
3、希尔排序:
function shellSort(arr) {
var len = arr . length,temp,gap=1;
while(gap <len /5){
gap=/ gap* 5+1;
}
for(gap; gap >0; gap= Math.floor(gap/ 5)){
for(var i = gap;i <.len; i++){
temp= arr[i];
for(var j=i- gap;i>=0 && arr[j] > temp; i-= gap){
arr[j +gap] =arr[i];
}
arr[j+ gap] =temp;
}
}
return arr;
}
4、冒泡排序:
function sort(elements){
for(var i =0; i< elements.length - 1; i++){
for(var j= 0;j< elements.length-i-1; j++){
if(elements[j]> elements[j +1]){
var swap = elements[j];
elements[j]= elements[j +1];
elements[j +1]= swap;
}
}
}
}