汉诺塔(Hanoi)移动过程递归打印---Java
【摘要】
题目介绍
题目描述 用递归的方法输出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)