• 递归


    递归方法的特征:

    1、调用自身;

    2、当它调用自身的时候时为了解决更小的问题;

    3、存在某个足够简单的问题的层次,这一层算法不需要调用自身就可以自己解答,且返回结果。

    此外,递归的效率低,人们使用递归是因为它能简化问题,而不是有更高的效率。

    /**
     * 阶乘
     *
     * @param a
     * @return
     */
    public int jiecheng(int a) {
        if (a == 1) {
            return a;
        }
        return a * jiecheng(a - 1);
    }
    
    /**
     * 长方形(a,b),将长方形均匀的分成方块,且分出的方块尽可能大
     *
     * @param a
     * @param b
     * @return
     */
    public int getSquare(int a, int b) {
        if (a == b) {
            return a;
        }
        if (a > b) {
            a = a - b;
        } else {
            b = b - a;
        }
        return getSquare(a, b);
    }
    
    /**
     * 数组求和
     *
     * @param a
     * @return
     */
    public int sumOfArrary(int[] a, int index) {
        if (a.length == index + 1) {
            return a[index];
        }
        return a[index] + sumOfArrary(a, index + 1);
    }
    
    /**
     * 求数组中最大的数
     *
     * @param a
     * @param index
     * @param max
     * @return
     */
    public int maxOfAarray(int a[], int index, int max) {
        if (index + 1 == a.length) {
            if (a[index] > max) {
                return a[index];
            }
            return max;
        }
        if (a[index] > max) {
            max = a[index];
        }
        return maxOfAarray(a, index + 1, max);
    }
    
    /**三角数字递归
     * @param n
     * @return
     */
    public int triangle(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n + triangle(n-1);
        }
    }
    /**
     *利用递归实现二分法查找
     * @param p 起始索引
     * @param r 结束索引
     * @return
     */
    public int selfQueryByRecursion(int p,int r){
        int[] orderedArray = {1, 1, 2, 3, 3, 4,5, 7, 9, 9};
        int q=(p+r)/2;
        if(p<r){
            if(orderedArray[q]==5){
                return q;
            }else if(orderedArray[q]>5){
                return selfQueryByRecursion(p,q-1);
            }else {
                return selfQueryByRecursion(q+1,r);
            }
        }
        return -1;
    }
  • 相关阅读:
    JavaSE 学习笔记04丨异常
    Codeforces Round #677 (Div. 3) E、G题解
    JavaSE 学习笔记03丨继承、接口、多态、内部类
    ftp通过了用户验证但是连接超时
    实型变量
    3dmax放样
    画直线算法
    VAE变分自动编码器
    RNN 、LSTM长短期记忆网络
    java比较字符串
  • 原文地址:https://www.cnblogs.com/BonnieWss/p/10874134.html
Copyright © 2020-2023  润新知