前言:汉诺塔为递归中的经典题目,所以应该都要学会吧。(我目前还是懵逼的)。
然后看了知乎上很多大佬的文章,好像大概也许可能懂了一些。
直接上图上代码吧,我也不太懂,反正我现在背住了
以下是我的一些小小的理解,各位可以先看我上面放的那个文章链接,我就是通过那个文章理解的。
public class 汉诺塔 {
/**
* 总共n层
* 1.1~(n-1)层 从 form 到 to ,helper为辅助
* 2.第n层到从form 到 to
* 3.然后 1~(n-1)层回到 最左边(helper),然后到最右边(form)----如图所示
* 4.
* */
public static void main(String[] args) {
Hanoi(3, "A", "B", "C");
}
//Hanoi是将 将n层从from 移动到 to A B C
public static void Hanoi(int n,String from,String to ,String helper) {
if ( n==1 ) {
move(n, from, to);
return;
}
//如图所示,Hanoi的参数可以理解为ABC下面对应的顺序
Hanoi(n-1, from, helper, to);
move(n, from, to);
Hanoi(n-1, helper, to, from);
}
public static void move(int n,String from,String to) {
System.out.println("移动 "+ n +" 从 "+ from + " 到 " + to);
}
}
如果有更好的理解方式,欢迎大佬们在评论区留言。