递归与迭代用法

对于知根知底的东西可以用递归,不到万不得已,不推荐使用递归。如文件夹的层数,可以使用递归

递归的效率很低的。递归是在操作栈(不断的出栈和进栈),这个比较耗资源。(汉诺塔问题就是使用递归,函数自己调用自己)

---->迭代:循环结构,递归:选择结构

>>斐波那契数列,打印前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;
        
    }

原文地址:https://www.cnblogs.com/LvLoveYuForever/p/5742506.html