Ханойская башня-JavaScript-хорошие части [дубликат]
этот вопрос уже есть ответ здесь:
Я видел другие вопросы о so о рекурсивной функции, и я прочитал ответы, но я все еще не могу заставить алгоритм щелкнуть в моей голове
var hanoi = function (disc, src, aux, dst) {
if (disc > 0) {
hanoi(disc - 1, src, dst, aux);
document.write('Move disc ' + disc + ' from ' + src + ' to ' + dst);
hanoi(disc - 1, aux, src, dst);
}
}
hanoi(3, 'Src', 'Aux', 'Dst');
Как документ.писать.(..), либо. Моя логика-это первый раз, когда мы запускаем функциональный диск > 3. затем мы рекурсивно вызываем функцию снова, пропуская все ниже, так как этот документ.написать получить шанс бежать?
Я понимаю рекурсию (сделал основные примеры), но я все еще не вижу, как вы получаете результат. Если есть способ запустить его визуально и увидеть его в действии, это очень поможет.
1 ответов
вы можете думать о том, что произойдет, как дерево вызовов (время движется сверху вниз):
hanoi(3, ...) =>
|-> hanoi(2, ...) =>
| |-> hanoi(1, ...) =>
| | |-> hanoi(0, ...) =>
| | | \-> (does nothing)
| | |-> document.write(...)
| | |-> hanoi(0, ...) =>
| | | \-> (does nothing)
| | <-/ [hanoi(1, ...) finished]
| |-> document.write(...)
| |-> hanoi(1, ...) =>
| | |-> hanoi(0, ...) =>
| | | \-> (does nothing)
| | |-> document.write(...)
| | |-> hanoi(0, ...) =>
| | | \-> (does nothing)
| | <-/ [hanoi(1, ...) finished]
| <-/ [hanoi(2, ...) finished]
|-> document.write(...) [halfway done!]
|-> hanoi(2, ...) =>
| \-> [same pattern as the first time, with different data]
\-> [hanoi(3, ...) finished]