汉诺塔问题(递归实现)

2020-04-20 16:46:47 浏览数 (1)

古代有一个梵塔,塔内有三个座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) 将问题分解为规模更小的子问题进行求解 

0 人点赞