递归
- 递归:A方法调用A方法
- 利用递归可以用简单的程序来解决一些复杂的问题。通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归只需要少量的程序就可描述出解题过程所需要的多次重复计算,可大大减少程序的代码量。递归的能力在于用有限的语句来定义对象的无限合集。
- 递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。{如果没有头,则会陷入死循环)
- 递归体:什么时候需要调用自身方法。
public class Demo {
public static void main(String[] args) {
System.out.println(fac(5));
}
//阶乘
public static int fac(int n){
if(n == 1){ //递归头(结束条件)
return 1;
}else{
return n*fac(n-1); //递归体
}
}
}
-
缺点 :
-
效率:递归由于是方法自己调用自己,每一次调用方法时,都需要在内存栈中分配空间以保存参数、返回地址以及变量,而往栈中压入数据和弹出数据都需要时间,所以递归耗时更多!
-
性能:栈可能溢出,每一次方法的调用都会在内存栈中分配内存,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出!
-