Java案例:汉诺塔问题
游戏规则:
(1)一次只能移动一个环
(2)小环必须在大环之上
(3)所有环从A柱移到C柱
1、创建TestHanoi类
package recursion; package net.hw.recursive; /** * Created by howard on 2017/11/21. */ public class TestHanoi { private static long step; public static void main(String[] args) { hanoi(3, 'A', 'B', 'C'); } /** * @param n 铁饼个数 * @param x 起点位置 * @param y 中间位置 * @param z 终点位置 */ public static void hanoi(int n, char x, char y, char z) { if (n == 1) { move(x, z); } else { hanoi(n - 1, x, z, y); move(x, z); hanoi(n - 1, y, x, z); } } public static void move(char p1, char p2) { step++; System.out.println("Step " + step + ": " + p1 + " -> " + p2); } }
2、运行结果
当铁饼数n=3,移动次数=2^3-1=7
可以测试一下,当铁饼数n=64时,移动次数有多大。