Java 理解河内塔中递归流的问题
我最近在学习数据结构和算法。我得到了河内塔楼的简单工作代码Java 理解河内塔中递归流的问题,java,data-structures,towers-of-hanoi,Java,Data Structures,Towers Of Hanoi,我最近在学习数据结构和算法。我得到了河内塔楼的简单工作代码 package linkedlist; public class TowrerOfHanoi { public static void main(String[] args) { TowrerOfHanoi toh=new TowrerOfHanoi(); toh.move(3,'A','C', 'B'); } public void move(int numberOfDis
package linkedlist;
public class TowrerOfHanoi {
public static void main(String[] args) {
TowrerOfHanoi toh=new TowrerOfHanoi();
toh.move(3,'A','C', 'B');
}
public void move(int numberOfDisc,char from,char to,char inter) {
System.out.println(numberOfDisc);
if(numberOfDisc==1) {
System.out.println("Moving disc 1 from"+from
+"to"+to);
}
else {
move(numberOfDisc-1,from,inter,to);
System.out.println("Moving disc "+numberOfDisc+"from"+from
+"to"+to); //confusion at this point
move(numberOfDisc-1,inter,to,from);
}
}
}
光盘数量=3
调用move函数并
At first step: move(3,A,C,B) is passed and it goes to else block.
2nd step:Recursion is seen and move(2,A,B,C) is called.
3rd step:Recursion is seen and move(1,A,B,C) is called.
因为noofdisc=1so,所以它转到第一个if块并
我明白了:
3
2
1
Moving disc 1 fromAtoC
在这一点上我是清楚的,在调试之后,我在控制台中看到noofdisk=2:
因为,我们上次调用的递归是move(1,A,B,C)noofdisk=2是什么?我在这一点上遇到了困难。请帮助我了解在这一步中我是如何获得noofdisk=2?代码在处理河内塔问题时运行良好。当我考虑递归问题时,我将每个新的递归调用想象为先进先出堆栈,其中最新的调用首先处理。当使用noof==2调用move时,它仅为该调用将noof减去1,因此点击基本案例并打印“Moving disc 1 fromAtoC”并完成调用。在上一次调用中,noof仍然等于2,因为它从未在本地实例中分配noof,只是简单地传递了递减的值。简单地递减,但我通过的noofdisk是3,但它是怎样的2呢?好的,我知道了,谢谢你先进先出帮助我理解,但先进先出有用吗?我不这么认为,noofdisk=2先到,但noofdisk=1先到。虽然noofdisk=1在noofdisk=2之后。