一.冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最 后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
二、递归
递归算法是一种直接或间接地调用自身算法的过程。
1)把规模大的问题转化为规模小的相似的子问题来解决,反复执行的过程(调用自身)
2)有跳出反复执行过程的条件(递归出口)
递归结构包括两个部分:
1、定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
2、递归体。解答:什么时候需要调用自身方法。
递归的缺陷
简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多是速度要比循环慢的多,所以在使用递归时要慎重。
阶乘的递推公式为:factorial(n)=n*factorial(n-1)
public static long factorial(int n) throws Exception { if (n < 0) throw new Exception("参数不能为负!"); else if (n == 1 || n == 0) return 1; else return n * factorial(n - 1); }
//递归算法 契数列 兔子总数分别为:1、1、2、3、5、8、13
//3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
递归从1到100相加:
什么情况下使用递归?
比如你遍历文件夹时,有子目录就一直遍历 直到没了