学习资源:拉勾教育
降低时间复杂度的两个角度
- 数据结构是从
数据组织形式
的角度达成目标 - 算法思维则是从
数据处理
的思路上去达成这个目标
什么是递归
- 递归是指在函数的定义中使用函数自身的方法
- 递归的基本思想是把规模大的问题转化为规模小的相同的子问题来解决
- 递归的实现包含了两个部分:
- 递归主体
- 终止条件
- 递归的数学模型其实就是
数学归纳法
,写出递归代码的关键在于,写出递归公式和找出终止条件
递归的案例——汉诺塔
把这个大问题拆解为以下3个小问题:
- 把从小到大的n-1个盘子,从x移动到y
- 接着把最大的一个盘子,从x移动到z
- 再把从小到大的n-1个盘子,从y移动到z
public class Main {
public static void hanio(int n, String x, String y, String z) {
if (n < 1) {
System.out.println("汉诺塔的层数不能小于1");
} else if (n == 1) {
System.out.println("移动: " + x + " -> " + z);
return;
} else {
hanio(n - 1, x, z, y);
System.out.println("移动: " + x + " -> " + z);
hanio(n - 1, y, x, z);
}
}
public static void main(String[] args) {
String x = "x";
String y = "y";
String z = "z";
hanio(3, x, y, z);
}
}