理解河内塔递归流程的问题
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 只是简单地将其递减。
我最近在学习数据结构,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 只是简单地将其递减。