递归
递归方法的特征:
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; }