Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要帮助了解这个c++;代码计算_C++_Towers Of Hanoi - Fatal编程技术网

C++ 需要帮助了解这个c++;代码计算

C++ 需要帮助了解这个c++;代码计算,c++,towers-of-hanoi,C++,Towers Of Hanoi,这段代码是如何计算的?它为我提供了河内塔问题的正确解决方案,但我不理解评估的顺序 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 " <&l

这段代码是如何计算的?它为我提供了河内塔问题的正确解决方案,但我不理解评估的顺序

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);
}
void moveDisks(int n,const char*pegA,const char*pegB,const char*pegC)
{
如果(n==0)
{
返回;
}
移动圆盘(n-1,pegA,pegC,pegB);

std::cout注释绝对正确,但除此之外,这里还有一个伪代码/调用堆栈/输出,可能有助于概念化它:

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

如果您阅读有关递归的书籍或开始使用注释建议的调试器(您应该这样做),您将经常看到类似的图表.

使用调试器并逐步完成代码…阅读和;这将有助于您理解此代码的工作原理。这段代码也让我大吃一惊,当它被教给我时。算法适合模型的难以置信的能力,以及适合算法的语言。