我的递归函数有什么问题?

时间:2010-04-30 16:27:40

标签: c++

所以我正在尝试实现一个递归函数来生成Tic-Tac-Toe的整个游戏树,我似乎无法让它工作。

   void BuildTree(Node& nNode, const int& nextPlayer)
    {
        //Copy last board
        Ticboard tBoard = nNode.m_board;
        do
        {
//Return first valid move
            int validMove = tBoard.FirstValidMove();
            if (validMove != -1)
            {
                Node f;
                Ticboard tempBoard = nNode.m_board;
                tempBoard.Move(validMove, nextPlayer);
                tBoard.Move(validMove, nextPlayer);
                f.m_board = tempBoard;
                f.m_winCount = 0;
                nNode.m_branches.push_back(f);
                int currPlay = (nextPlayer == 1 ? 2 : 1);
                BuildTree(f,currPlay);
            }
            else
            {
                break;
            }
        }while(true);
    }

实际的功能工作,我已经完成并调试它,它显示它按预期工作,但当我看到在Visual Studio中生成的节点(顺便提一下Tic-Tac-Toe)通过断点,它只显示前9个分支。我知道更多是因为它需要几秒钟,我添加了一个计数器。

以下是我如何调用代码:

    Ticboard lol;
Node startTree;
startTree.m_board = lol;
int startPlay = 1;
BuildTree(startTree, startPlay);

如果没有复制我所有的位板代码以及这里的东西,你能看到逻辑上的任何错误吗?

1 个答案:

答案 0 :(得分:2)

            nNode.m_branches.push_back(f);

这会推送一个节点f的副本,因此nNode.m_branches中的内容与稍后对f的修改无关。