递归

递归方法的特征:

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

 

posted @ 2019-05-16 10:40  第二人生Bonnie  阅读(149)  评论(0编辑  收藏  举报