• 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

  • 相关阅读:
    NodeJs 的Module.export 和 export
    Angular 调试
    设计模式 -- 访问者
    typescript 枚举
    Swagger 实践 <二>
    eventFlow 系列 <三> 查询所有
    成员变量的隐藏和方法的重写
    Facetoprocess_program_design
    ATM_tests
    transmission protocol
  • 原文地址:https://www.cnblogs.com/xcxfuryit/p/7112744.html
Copyright © 2020-2023  润新知