Итак, мой профессор хотел бы, чтобы мы разработали рекурсивные функции для связанного списка из этого класса 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
Я бы вставил фактический результат, но он ОЧЕНЬ длинный, так как каждый объект отображает имя, фамилию, адрес, улицу, почтовый индекс, город человека, состояние, дата и тип отношения.
Всякий раз, когда я вынимаю displayListRecursive(node->next)
в функции displayListRecursive, все печатается нормально.Но тогда это не совсем рекурсивная функция, верно?Либо это?У кого-нибудь есть ответы, которые могут это объяснить?(Я ДЕЙСТВИТЕЛЬНО новичок в рекурсии)