古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小 不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移 到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子 始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动 的步骤。
代码语言:javascript复制import java.util.Scanner;
public class Main {
static int i = 1;
public static void Haoni(int n ,char from,char mid,char to){
if ( n == 1){
move(1,from,to);
}else{
Haoni(n-1, from, to , mid);
move(n, from,to);
Haoni(n-1, mid , from , to);
}
}
public static void move(int n ,char from,char to){
System.out.printf("第%d步:将%d号盘子%c---->%cn",i ,n,from,to);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int num = in.nextInt();
Haoni(num, 'A', 'B', 'C');
in.close();
}
}
代码语言:javascript复制 **递归的作用**
1) 替代多重循环
2) 解决本来就是用递归形式定义的问题
3) 将问题分解为规模更小的子问题进行求解