对于知根知底的东西可以用递归,不到万不得已,不推荐使用递归。如文件夹的层数,可以使用递归
递归的效率很低的。递归是在操作栈(不断的出栈和进栈),这个比较耗资源。(汉诺塔问题就是使用递归,函数自己调用自己)
---->迭代:循环结构,递归:选择结构
>>斐波那契数列,打印前40位的数字
//迭代的实现
public static void main(String[] args){
int a[40];
int a[0]=0;
int a[1]=1;
for(int $i=2;$i<40;$i++){
a[$i]=a[$i-1]+a[$i-2];
}
}
//递归的实现方式
public int feb(int n){
if(n<2)
return n==0?0:1;
return feb(n-1)+feb(n-2);
}
像求一个数的阶乘 如:(5!=5*4*3*2*1)
int factorial(int n){
if(n==0) return 1;
return n*factorial(n-1);
}
>>折半查找递归的实现方式:
/**
*num要查找的数,pre要查找部分的开头,low要查找部分的结尾(时间复杂度:O(log2n))
**/
public static int cheakNum(int a[],int num,int pre,int low){
int mid=(pre+low)/2;//指向数组的中间
if(num>a[mid]){
//num就在数组的后半部分
pre=mid+1;
return cheakNum(a, num, pre, a.length-1);
}
else if(num<a[mid]){
//num在数组的前半部分
low=mid-1;
return cheakNum(a, num, 0, low);
}else
return mid;
}