理解河内塔递归流程的问题

Problem in understanding flow of recursion in towers of hanoi

我最近在学习数据结构,algorithm.I 得到了汉诺塔的简单工作代码。

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 移动函数被调用

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=1 所以,如果块和 我明白了:

3
2
1
Moving disc 1 fromAtoC

到目前为止我很清楚,之后我在调试时看到 noofdisk=2 在控制台:

因为,我们最后一次调用的递归是 move(1,A,B,C) noofdisk=2 怎么样?我卡在这个 point.Please 帮助我如何在这一步得到 noofdisk=2?该代码适用于河内塔问题。

当我思考递归问题时,我将每个新的递归调用想象成一个先进先出的堆栈,其中最近的调用首先被处理。当使用 noof==2 调用 move 时,它​​仅针对该调用将 noof 减去 1,因此符合您的基本情况并打印 "Moving disc 1 fromAtoC" 并完成调用。在之前的调用中,noof 仍然等于 2,因为它从未在本地实例中分配 noof 只是简单地将其递减。