Ханойские башни — Нужна помощь в выяснении того, как этот код C ++ оценивает

как этот код оценивает? это дает мне правильное решение проблемы Ханоя, однако я не понимаю порядок оценки.

void moveDisks(int n, const char* pegA, const char* pegB, const char* pegC)

{
if (n == 0)
{
return;
}

moveDisks(n-1, pegA, pegC, pegB);
std::cout << "Move disk from " << pegA << " to " << pegC << std::endl;
moveDisks(n-1, pegB, pegA, pegC);
}

1

Решение

Комментарии абсолютно правильны, но кроме того, здесь есть псевдокод / ​​callstack / output, который может помочь его концептуализации:

moveDisks(4, "A", "B", "C");
moveDisks(3, "A", "C", "B");
moveDisks(2, "A", "B", "C");
moveDisks(1, "A", "C", "B");
Move disk from A to B
Move disk from A to C
moveDisks(1, "B", "A", "C");
Move disk from B to C
Move disk from A to B
moveDisks(2, "C", "A", "B");
moveDisks(1, "C", "B", "A");
Move disk from C to A
Move disk from C to B
moveDisks(1, "A", "C", "B");
Move disk from A to B
Move disk from A to C
moveDisks(3, "B", "A", "C");
moveDisks(2, "B", "C", "A");
moveDisks(1, "B", "A", "C");
Move disk from B to C
Move disk from B to A
moveDisks(1, "C", "B", "A");
Move disk from C to A
Move disk from B to C
moveDisks(2, "A", "B", "C");
moveDisks(1, "A", "C", "B");
Move disk from A to B
Move disk from A to C
moveDisks(1, "B", "A", "C");
Move disk from B to C

Подобные диаграммы вы увидите очень часто, если прочитаете о рекурсии или начнете использовать отладчик, как в комментариях (и вам следует!).

1

Другие решения


По вопросам рекламы [email protected]