zoukankan      html  css  js  c++  java
  • 汉诺塔递归问提

    一、计思想汉诺塔n个盘子的移动问题,基本就三步:①将n-1个盘子从A移到B。②将第n个盘子从A移到C。③将B上的n-1个盘子从B移到C。

    所以大体上需要两个函数,一个函数用来记录每一步盘子的移动过程,另一个函数用来实现递归操作(递归终止为剩下一个盘子,直接将盘子从A移到C)。

    递归函数是在函数中调用自己,一开始的运算没有完成,却又调用递归函数,一层嵌套一层,直到递归函数的终止,然后在一层一层的输出。

    二、程序流程图

    三、源程序代码

    package hannuota;

    import java.util.Scanner;

    public class hannuota
    {
      public static int quantity=0;//定义移动步数,并赋值为零  
      public static void move(int plate,char a,char b) //盘子每一步的移动位置
      {
        System.out.println("第"+(++quantity)+"次移动:"+"将第"+plate+"个盘子从"+a+"移动到"+b);
        // 将第plate个盘子从a(代号为a,不是A柱)移动到b(同)
      }
      public void process(int n,char a,char b,char c)//移动过程,将n个盘子从a移动到c,b为过渡
      {
        if(n==1) move(1,a,c);//递归终止,n=1,将1盘子从a移到c
        else
        {
        process(n-1,a,c,b);//将n-1个盘子从a移动到b,c为过渡
        move(n,a,c);//将第n个盘子从a移到c
        process(n-1,b,a,c);//将n-1个盘子从b移动到c,a为过渡
        }
      }
      public static void main(String[] args)
      {
        char a='A';
        char b='B';
        char c='C';
        Scanner cin=new Scanner(System.in);
        System.out.print("请输入在A柱子上盘子的个数:");
        int n=cin.nextInt();
        hannuota hannuo=new hannuota();
        hannuo.process(n, a, b, c);
        System.out.println("共移动"+quantity+"次,将所有盘子从A移到C");
        cin.close();
      }
    }

     

    四、结果截图

                                                                        

  • 相关阅读:
    Objective-C 资源收藏
    坑爹的高德地图API
    nginx的location root alias指令以及区别
    Java Swing 界面中文乱码问题解决(Idea环境)
    不同的国家/地区与语言缩写代码
    IDEA编译时出现 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
    请重视!请重视!请重视!百度熊掌号之搜索资源平台体验
    php7带来的性能升级
    详解Asp.Net Core 2.1+的视图缓存(响应缓存)
    Xshell5 提示要继续使用此程序,您必须应用最新的更新或使用新版本
  • 原文地址:https://www.cnblogs.com/cc-9878/p/7657110.html
Copyright © 2011-2022 走看看