如何为递归函数编写方法定义

How to write a method definition for a recursive function?

本文关键字:方法 定义 递归函数      更新时间:2023-10-16

我有一个家庭作业问题,上面写着:

Destructor_Helper是一个递归函数,用于释放单链表中的每个节点。为destructor_helper编写一个方法定义。

 struct Node
 {
      string data;
      Node *next;
 }
 void List::~List()  {
     destructor_helper(head);
 }

我的回答是:

     void Destructor_Helper(Node *n) {
     cout<< n->data << endl;
     if (n->next != NULL)
          Destructor_Helper(n->next);
 } 

我的答案算错了,有人能帮我解决这个问题吗。

您的答案被计算错误,因为您没有进行任何释放。

要取消分配链表,可以存储下一个节点,取消分配当前节点,然后递归地转到下一个结点。我会这样做:

void destructor_helper(Node *n) {
    if (n == NULL) return;
    Node* next = n->next;
    delete n;
    destructor_helper(next);
} 

您可以很容易地发现递归的基本情况,即当前节点为NULL时。到那时,我们只需要返回。然后,我们将下一个节点存储在一个名为next的局部变量中,并删除当前节点。next局部变量可以是NULL,这并不重要。然后我们递归地传递next以删除列表的其余部分。

**扰流板**

void Destructor_Helper(Node *n) {
    cout<< n->data << endl;
    if (n->next != NULL)
    {
        Destructor_Helper(n->next);
    }
    delete n;
}

应该做这个把戏。