Java学习(3):递归问题(举例:汉诺塔问题)。
递归问题是编写程序中常见的问题之一。此随笔对具有明显递归的汉诺塔问题进行说明。
1 import java.util.Scanner; 2 3 /** 4 * 递归:汉诺塔 5 * 6 * @author xcx 7 * @time 2017年7月3日上午8:16:07 8 */ 9 public class Hanoi { 10 private static int i = 0; 11 12 public static void main(String[] args) { 13 int n = 0; 14 Scanner reader = new Scanner(System.in); 15 System.out.println("请输入盘子的数量:"); 16 n = reader.nextInt(); 17 System.out.println(n + "层汉诺塔的解法是:"); 18 move(n, 'A', 'B', 'C'); 19 System.out.println("Total:" + i); 20 } 21 22 private static void move(int no, char A, char B, char C) { 23 i++; 24 if (no == 1) {// 如果只有一个盘子,直接将盘子从A移动到C 25 System.out.println("移动盘子1从" + A + "到" + C); 26 } else {// 如果盘子的个数大于1个 27 // 先将n-1个盘子从A移动到B 28 move(no - 1, A, C, B); 29 // 再将第n个盘子移动到C 30 System.out.println("移动盘子" + no + "从" + A + "到" + C); 31 // 然后再将n-1个盘子从B移动到C 32 move(no - 1, B, A, C); 33 } 34 35 } 36 37 }
汉诺塔问题解析:n表示盘子的数量
if n = 1:直接将盘子从A移动到C
if n > 1:将(n-1)个盘子从A移动到B,然后再将(n-1)个盘子从B移动到C