汉诺塔 Java 实现 你一定能看懂

汉诺塔是一个很老的问题了,就是给你三根柱子,几个盘子,每次移动一个,然后大的盘子必须在小的盘子的下面,大概就是这么个意思,我也就不在赘述,下面上代码。

package mianshi;

import java.util.*;
import java.util.stream.Collectors;

public class pp {
    public static void main(String[] args) {
        Scanner ss = new Scanner(System.in);
        int level = ss.nextInt();
        move(level,'A','B','C');
    }
    //意思是从哪个地方借助那个地方转移到哪个柱子
    public static void move(int n,char a,char b,char c){
        if (n == 1 ){
            System.out.println("把最上面的盘子从"+a+"移动到" + "c");
        }else {
            move(n-1,a,c,b);
            System.out.println("把最下面的盘子从"+a+"移动到" + c);
            move(n-1,b,a,c);
        }
    }
}

其实这个看起来很简单,但是如果没有仔细考虑的话还是很不好理解的,其实思考问题是要把所有的条件都考虑进去,既要有几个盘子又要有几根柱子,所以这里有四个形式变量

那么思想是什么呢? 递归!!!!

要想把第n个盘子移动到C柱子上,那么就需要把剩下的n-1个盘子都移动到B柱子上,其实你可以这样想,借助某个柱子移动到某个柱子
move(n-1,A,B,C) 的意思就是借助B的柱子,把盘子移动到A->C
这样是不是就很好理解了呢?

哎 其实这个是我刚学习c语言的时候上课讲的题目,但是当时没有自己下来实践,对递归的理解也不是很深,所以导致了这个问题拖延到现在,所以还是需要沉淀自己啊,不要好高骛远,把自己的基础好好打牢!

原创文章 57 获赞 9 访问量 5941

猜你喜欢

转载自blog.csdn.net/Cscprx/article/details/104854657