汉诺塔是一个很老的问题了,就是给你三根柱子,几个盘子,每次移动一个,然后大的盘子必须在小的盘子的下面,大概就是这么个意思,我也就不在赘述,下面上代码。
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语言的时候上课讲的题目,但是当时没有自己下来实践,对递归的理解也不是很深,所以导致了这个问题拖延到现在,所以还是需要沉淀自己啊,不要好高骛远,把自己的基础好好打牢!