一、 递归
1.1 概念
方法内部调用方法本身
1.2 斐波那契数列
public class febonacci {
public static void main(String[] args) {
int i = sum(7);
System.out.println(i);
}
public static int sum(int i){
if(i ==1 || i==2){
return 1;
}
else return sum(i-1)+sum(i-2);
}
}
1.3 汉诺塔问题
- strat:开始的柱子
- middle:中间的柱子
- end:目标柱子
1.4 汉诺塔思路
有n个盘子,就必须先将上面的n-1个盘子挪好位置,再将第n个盘子放好位置;
有n-1个盘子,就必须先将上面的n-2个盘子挪好位置,再将第n1个盘子放好位置…有2个盘子,就必须先将上面的1个盘子挪好位置,再将第2个盘子放好位置;有1个盘子,将一个盘子放到第三个位置。
核心步骤是:有1个盘子,将一个盘子放到第三个位置;N>1;上面的n-1个盘子先放到中间的位置,下面的盘子放到第三个位置,再将上面的n-个盘子放到第三个位置;
package Array;
public class 汉诺塔 {
public static void main(String[] args) {
Hanior(4,'A','B','C');
}
public static void Hanior(int n, char start, char middle, char end){
//只有一个盘子
if(n == 1){
System.out.println("第"+n+"个盘子"+"从"+start+"到"+end);
}
else{
//移动上面的n-1个盘子到中间位置
Hanior(n-1, start, end, middle);
//移动第n个盘子
System.out.println("第"+n+"个盘子"+"从"+start+"到"+end);
//移动上面的n-1个盘子到第三个位置
Hanior(n-1, middle, start, end);
}
}
}
参考:《java版数据结构》