• 递归与迭代用法


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

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

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

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

  • 相关阅读:
    通俗理解乐观锁和悲观锁
    面试系列-HashMap和Hashtable的区别
    单点登录原理与实现
    CodeReview常见代码问题
    漫画:什么是冒泡排序?
    Redis 和 Memcached 的区别
    动态图文了解 8 大排序算法
    分布式系统常见的事务处理机制
    面试系列-String,StringBuffer,StringBuilder三者区别
    面试系列-高并发之synchronized
  • 原文地址:https://www.cnblogs.com/LvLoveYuForever/p/5742506.html
Copyright © 2020-2023  润新知