递归算法
1、什么是递归
- 在程序中A方法调用B方法这个我们很容易理解
- 递归就是在A方法调用A方法,就是自己调用自己!
2、 为什么要使用递归,递归的作用是什么
利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题详细的规模较小的问题来求解,递归策略只需少量的程序就可描述出结题过程中所需要的多次重复计算,大大减少了程序的代码量。递归的能力用在于有限的语句来定义对象的无线集合。
3、 递归结构包含两个部分
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
- 我们接下来演示一个阶乘的递归算法
public int f(int i){
//递归头,只有在i等于1的情况下不进行递归操作直接返回一直数值
if (i == 1){
return 1;
}else{
//递归体,当不满足if条件的时候进行递归操作
return i * f(i - 1);
}
}
//可以将递归算法理解为三个阶段
//1. 边界阶段:当程序运行到一个地方将不在运行,边界
//2. 前阶段:在没有到达边界阶段的时候程序不停的调用自身
//3. 返回阶段:程序从最后一次调用自身的方法,不停的向上返回方法执行的结果,直至该方法顶层
4、递归算法的问题
- 没有最好的算法,只有最优秀的算法,递归算法也是如此,当基数过大时递归算法也不在适用。
- 因为Java方法是栈机制,最底层是main方法,当它每调用一个方法它就给栈定压一层,所以当基数较大时,超出了栈所计算的最大值,会造成内存泄漏