Прошу простить этот вопрос, но я не нашел ни одного из других существующих потоков полезным. Я должен сказать, что у меня есть трудность обертывания вокруг сложных тем, может быть, я просто тупой. Я очень сожалею об этом. Во всяком случае, я попытался разобрать следующее, но есть что-то неладное.Разбор рекурсивного алгоритма Ханойской башни
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)
Второй рекурсии вызов останавливается преждевременно, и я хотел бы знать, что я упускать из виду.
Я нашел, что итеративный код будет намного легче понять, и я написал рекурсивный алгоритм, основанный на итеративном алгоритме.
Ах да, это моя ошибка: движение (2,1,3). Я могу разобрать его сейчас, но я не понимаю ТОЧНО, почему он работает, поэтому я не могу его кодировать, не помню шаблон кода. Благодарю. – david
Да, спасибо, но я действительно не понимаю, что и что. – david