C++11 链表的递归打印函数

C++11 链表的递归打印函数,c++11,recursion,printing,linked-list,derived-class,C++11,Recursion,Printing,Linked List,Derived Class,因此,我的教授希望我们为这个类“addressBookType”的链表设计递归函数,这个类派生自其他4个类。该程序基本上创建了一个带有姓名、地址、日期和关系的地址簿,每个地址簿都有自己的类 她想要实现的递归函数是打印、追加、删除和顺序搜索 但问题是。函数递归的主要前提是它应该在函数定义中调用自己,对吗?我成功地创建了递归附加函数,但是递归打印函数遇到了问题 以下是原始打印函数和递归打印函数: void addressBookType::displayList() const { List

因此,我的教授希望我们为这个类“addressBookType”的链表设计递归函数,这个类派生自其他4个类。该程序基本上创建了一个带有姓名、地址、日期和关系的地址簿,每个地址簿都有自己的类

她想要实现的递归函数是打印、追加、删除和顺序搜索

但问题是。函数递归的主要前提是它应该在函数定义中调用自己,对吗?我成功地创建了递归附加函数,但是递归打印函数遇到了问题

以下是原始打印函数和递归打印函数:

void addressBookType::displayList() const
{
    ListNode *nodePtr; // To move through list

    nodePtr = head; // start at the head of list

    while(nodePtr != NULL) // while nodePtr points to a node, move through list
    {
        displayListRecursive(nodePtr);
        nodePtr = nodePtr->next;
    }
}

void addressBookType::displayListRecursive(ListNode *node) const
{
    if(node != NULL)
    {
        (node->value).print();

        displayListRecursive(node->next);
    }

}
我遇到的问题是,当我运行程序时,所有内容都会打印,然后它开始在第二个对象上打印,直到剩下一个对象为止。当它打印时,我的意思是:

1
2
3
4

2
3
4

3
4

4
我会粘贴实际输出的内容,但它非常冗长,因为每个对象都显示此人的名字、姓氏、地址、街道、zipcode、城市、州、日期和关系类型


每当我在displayListRecursive函数中取出
displayListRecursive(node->next)
时,所有内容都可以正常打印。但它不是一个真正的递归函数,对吗?还是这样?有人能解释这一点吗?(我对递归非常陌生)

我认为递归定义很好。它将打印您提供的节点,然后使用下一个节点调用自己,直到其
NULL

因此,您只需要从第一个节点调用递归函数

问题是,在
displayList
的while循环中,所有节点都多次调用它。 我认为,如果您只是删除while循环,它应该像您所期望的那样工作

大概是这样的:

void addressBookType::displayList() const
{
    displayListRecursive(head);
}

void addressBookType::displayListRecursive(ListNode *node) const
{
    if(node != NULL)
    {
        (node->value).print();

        displayListRecursive(node->next);
    }

}