Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解河内塔中递归流的问题_Java_Data Structures_Towers Of Hanoi - Fatal编程技术网

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之后。