как этот код оценивает? это дает мне правильное решение проблемы Ханоя, однако я не понимаю порядок оценки.
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);
}
Комментарии абсолютно правильны, но кроме того, здесь есть псевдокод / 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
Подобные диаграммы вы увидите очень часто, если прочитаете о рекурсии или начнете использовать отладчик, как в комментариях (и вам следует!).