汉诺塔(Hanoi)移动过程递归打印---Java

举报
楚楚冻人玥玥仙女 发表于 2021/11/19 01:27:18 2021/11/19
【摘要】 题目介绍 题目描述 用递归的方法输出Hanoi(汉诺)塔问题的解决步骤。汉诺塔问题描述如下: 古代有一个梵塔,塔内有3个座A、B、C。初始时A座上有n个盘子,盘子大小不等,大的在下,小的在上。有一个老和...

题目介绍

题目描述
用递归的方法输出Hanoi(汉诺)塔问题的解决步骤。汉诺塔问题描述如下:
古代有一个梵塔,塔内有3个座A、B、C。初始时A座上有n个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这n个盘子从A座移动到C座,但是每次只允许移动一个盘子,而且在移动过程中在3个座上需要始终保持大盘在下,小盘在上,在移动过程中可以使用B座。
要求使用递归的方法模拟并输出移动的步骤。
输入
一个正整数n,保证n不超过5。
输出
解决n个盘子的汉诺塔问题的步骤。
每一步一行,在这一行中输出将盘子从一个座移动至另一个的过程。例如移动A座顶部的盘子至C座,则输出A->C。
请注意行尾输出换行。
样例输入
3
样例输出
A->C
A->B
C->B
A->C
B->A
B->C
A->C

Java代码:

import java.util.*;

public class Main {
    static int n;
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        n = cin.nextInt();
        hanoi(n, 'A', 'B', 'C');
    }

    /**
     * 从a移动到c,借助b。需要移动n个盘子
     * @param n
     * @param a
     * @param b
     * @param c
     */
    private static void hanoi(int n, char a, char b, char c) {
        if(n == 1){//递归重点,进行打印
            System.out.println(a+"->"+c);
            return;
        }
        hanoi(n-1,a,c,b);//递归移动
        hanoi(1,a,b,c);
        hanoi(n-1,b,a,c);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

文章来源: blog.csdn.net,作者:爱玲姐姐,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jal517486222/article/details/85105543

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。