首页 > 代码库 > 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):递归问题(举例:汉诺塔问题)。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。