目录
01 递归
简单的说,递归就是方法自己调用自己,每次调用时传入不同变量, 递归有著姐编程者解决复杂的问题,同时可以使代码变得简洁。
调用递归时需要有一个跳出递归的出口,否则会栈溢出
1.1 递归的调用机制
打印问题
阶乘问题
public class RecursionTest {
public static void main(String[] args){
test(4);
}
// 打印问题
public static void test(int n){
if(n > 2){ // 设置条件什么时候退出递归
test(n - 1);
}//else{ // 加else 只打印 2, 不加else 打印2 3 4
System.out.println("n = " + n);
//}
}
// 阶乘问题
public static int factorial(int n){
if(n == 1){ // 递归结束的条件
return 1;
} else{
return factorial( n - 1) * n; // factorial(2 - 1) * 2
}
}
}
1.2 递归能解决的问题
- 各种数学问题:八皇后问题,汉诺塔, 阶乘,迷宫问题
- 各种算法:快排, 归并排序,二分查找,分治算法
- 需要用栈解决的问题
注意事项
- 执行一次 方法时,就创建一个新的受保护的独立空间(栈)
- 方法中的局部变量是独立的,不会互相影响
- 如果方法中使用引用类型变量,就会共享该变量(数组)
- 递归必须向退出递归条件逼近,否则会无限递归: StackOverFlowError