首页 > 代码库 > Java学习(3):递归问题(举例:汉诺塔问题)。

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

Java学习(3):递归问题(举例:汉诺塔问题)。