1.斐波那契数列问题
从第三个数开始,后面一个数是前两个数之和。
如:1 1 2 3 5 8 13 …
package shujujiegou;
/**
*@description
*@author Darren_Hu
*@date 2019年1月24日---上午9:18:19
*
*递归:斐波那契数列
*/
public class Febonacci {
public static void main(String[] args) {
//斐波那契数列:1 1 2 3 5 8 13
int a = print(7);
System.out.println(a);
}
public static int print(int i){
if(i == 1 || i == 2){
return 1;
}else{
return print(i-1) + print(i-2);
}
}
}
2.汉诺塔问题
package shujujiegou;
/**
*@description
*@author Darren_Hu
*@date 2019年1月24日---上午9:22:35
*
*递归:汉诺塔问题,三个柱子移动盘子,大盘子不能再小盘子下面
*思路:无论多少个盘子,都认为只有两个盘子,最下面的一个盘子和上面的盘子
*/
public class Hannuota {
public static void main(String[] args) {
print(2,'A','B','C');
}
/**
*
* @param n 盘子个数
* @param from 开始的柱子
* @param in 中间的柱子
* @param to 目标柱子
*/
public static void print(int n,char from,char in,char to){
if(n==1){
System.out.println("请将第1个盘子从" + from + "移动到" +to);
}else{
//移动上面所有的盘子到中间位置
print(n-1,from,to,in);
//移动下面的盘子到目标位置
System.out.println("请将第" + (n)+ "个盘子从" + from + "移动到" +to);
//把上面所有的盘子从中间位置移动到目标位置
print(n-1,in,from,to);
}
}
}