zoukankan      html  css  js  c++  java
  • 汉诺塔递归算法

    解决汉诺塔问题的思路:

    1. 如果只有一个金片,则把该金片从源移动到目标棒,结束。

    2. 如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒。

    对于汉诺塔问题的求解,可以通过以下三个步骤实现:

    1. 将塔A上的n-1个碟子借助塔C先移到塔B上。

    2. 把塔A上剩下的一个碟子移到塔C上。

    3. 将n-1个碟子从塔B借助塔A移到塔C上。

    C版本

    #include<stdio.h>
      
    void move(int n,char a,char b,char c)
    {
        if(n==1)
            printf("	%c->%c
    ",a,c);    //当n只有1个的时候直接从a移动到c
        else
        {
            move(n-1,a,c,b);            //第n-1个要从a通过c移动到b
            printf("	%c->%c
    ",a,c);
            move(n-1,b,a,c);            //n-1个移动过来之后b变开始盘,b通过a移动到c,这边很难理解
        }
    }
      
    main()
    {
        int n;
        printf("请输入要移动的块数:");
        scanf("%d",&n);
        move(n,'a','b','c');
    }

     

    java版本

      public static void main(String args[]) throws Exception {
                 int n = 3;
                 Test test = new Test();
                 test.move(n, 'A', 'B', 'C');
             }
         
             public  void move(int n, char a, char b, char c) {
                 if (n == 1){
                     System.out.println("num: " + n + " from " + a + " to " + c);
                 }else {
                     move(n - 1, a, c, b);
                     System.out.println("num: " + n + " from " + a + " to " + c);
                     move(n - 1, b, a, c);
                 }
             }
  • 相关阅读:
    6.Redis 哈希(Hash)的命令
    5.redis中String类型数据操作的命令
    4.redis中的key命令
    3.redis客户端连接服务器
    Bomblab
    leetcode multiply-strings
    datalab
    leetcode max-points-on-a-line
    os
    python 实现简单的端口扫描器
  • 原文地址:https://www.cnblogs.com/chenweichu/p/5745055.html
Copyright © 2011-2022 走看看