一、递归
package com.xianxing.digui;
/**
* 递归
*
* @author l1
*
*/
public class TestRecursive {
public static void main(String[] args) {
print(10);// 10 9 8 7 6 5 4 3 2 1
}
public static void print(int i) {
if (i > 0) {
System.out.print(i + " ");
print(i -= 1);
}
}
}
二、斐波那契数列
package com.xianxing.digui;
public class TestFebonacci {
public static void main(String[] args) {
// 斐波那契数列1 1 2 3 5 8 13
// 前两项为1,第三项之后等于之前的两项之和
System.out.println(febonacci(6));// 8
}
// 打印第n项斐波那契数列
public static int febonacci(int i) {
if (i == 1 || i == 2) {
return 1;
} else {
return febonacci(i - 1) + febonacci(i - 2);
}
}
}
三、汉诺塔
汉诺游戏规则如下:
1、有三根相邻的柱子,从左到右
标号为A,B,C。
2、A柱子上从下到上按金字塔状叠放着n个不同dao大小的圆盘。
3、现在把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。
package com.xianxing.digui;
/**
* 汉诺塔问题
*
* @author l1
*
*/
public class TestHanoi {
public static void main(String[] args) {
hanoi(4, 'A', 'B', 'C');
}
/**
* @param n 共有n个盘子
* @param from 开始的柱子
* @param in 中间的柱子
* @param to 目标柱子
*/
public static void hanoi(int n, char from, char in, char to) {
// 只有1个盘子
if (n == 1) {
System.out.println("第1个盘子从" + from + "移到" + to);
} else {
// 无论有多少盘子,都可认为2个盘子的递归,上面的所有盘子和下面的一个盘子。
// 移动上面的所有盘子到中间柱子
hanoi(n - 1, from, to, in);
// 移动下面的盘子
System.out.println("第" + n + "个盘子从" + from + "移到" + to);
// 把上面的所有盘子从中间位置移到目标位置
hanoi(n - 1, in, from, to);
}
}
}
输出:
第1个盘子从A移到B
第2个盘子从A移到C
第1个盘子从B移到C
第3个盘子从A移到B
第1个盘子从C移到A
第2个盘子从C移到B
第1个盘子从A移到B
第4个盘子从A移到C
第1个盘子从B移到C
第2个盘子从B移到A
第1个盘子从C移到A
第3个盘子从B移到C
第1个盘子从A移到B
第2个盘子从A移到C
第1个盘子从B移到C