为什么使用while循环使用递归进入无限循环,但是在if条件下可以正常工作

时间:2019-09-25 17:26:05

标签: c++

我正在使用inorder和递归,但是当我将其与while循环一起使用时,最后一次调用将进入无限循环,但可以与if语句一起正常使用。 有人可以帮助while循环和if语句具有递归实际发生什么

void tree::inorder(node* r)
{
    node* temp;
    temp = r;
    while (temp != NULL)
    {
        inorder(temp->getleft());
        cout << "\n\n\t " << temp->getdata();
        inorder(temp->getright());
    }
}

1 个答案:

答案 0 :(得分:3)

想象一下,您有一个node* head,其中有一个nullptr左节点和一个nullptr右节点。

上面的代码将进入while (temp != NULL)

它将在左侧节点上调用inorder(temp->getleft());。因为该节点是nullptr,所以它不会进入嵌套调用中的while

它将在右侧节点上调用inorder(temp->getright());。由于该节点为nullptr,因此不会在嵌套调用中进入while

那又是什么?它位于while的末尾,但是temp仍指向您的头节点。因此,它将返回到while的开头。并永远做到这一点。