很抱歉问这个问题,但我没有发现任何其他现有线程有用。我不得不说我很难理解复杂的话题,也许我只是愚蠢。我对此深感抱歉。无论如何,我试图解析以下内容,但有些不对劲。
public class tower {
public static void move(int n, int startPole, int endPole) {
if (n== 0){
return;
}
int intermediatePole = 6 - startPole - endPole;
move(n-1, startPole, intermediatePole);
System.out.println("Move " +n + " from " + startPole + " to " +endPole);
move(n-1, intermediatePole, endPole);
}
public static void main(String[] args) {
move(2, 1, 3);
}
}
我草草写了一些笔记来帮助自己解析代码:
move(2,1,3)
move(1,1,2)
n==0
--------going back up
n==0
move(1,1,2)
Move 1 from 1 to 2
move(2,1,3)
Move 2 from 1 to 3
move(2,1,3)
move(1,2,3)
n==0
-------going back up
n==0
move(1,2,3)
Move 1 from 2 to 3
move(2,1,3)
?????????? (step is missing)
第二个递归调用过早停止,我想知道我忽略了什么。
我发现迭代代码更容易理解,我写了一个基于迭代算法的递归算法。