• 算法入门———递归


    递归:在定义自身的过程中,直接或间接调用自身的一种算法

    最简单的递归示例:

    阶乘

    求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);
     }

    二分查找算法还有其他思路,以后再补充

  • 相关阅读:
    Codeforces 1009F Dominant Indices
    C++之++运算符重载问题
    Codeforces 1010D Mars rover
    这是一个开始
    MoreEffectiveC++Item35(异常)(条款9-15)
    C++隐式类类型转化
    MoreEffectiveC++Item35(操作符)(条款5-8)
    MoreEffectiveC++Item35(基础议题)(条款1-4)
    php+mysql网站无限级栏目分类-递归获取树形结构函数
    JavaScript简易动画
  • 原文地址:https://www.cnblogs.com/xiawenyu/p/5723673.html
Copyright © 2020-2023  润新知