在C ++中递归地总结链表中的元素

时间:2017-03-29 03:34:11

标签: c++ recursion linked-list

假设我有一个Sum方法来帮助递归地对链表中的元素求和,

void Sum(Node *head)
{
    int sum = 0;   //I think this is the problem since it resets the sum on each recursive call
    while (head != NULL) {
        Sum(head->next); //iterate to the last node before null
        sum += head->data; 
        return;
    }

    cout << " The sum is : " << sum << endl;
}

我遇到的问题是我认为由于每次递归回拨我的总和值被重新初始化为0;所有递归完成后,允许我保持总和值的方法是什么?

2 个答案:

答案 0 :(得分:2)

它可能比你拥有的要简单得多。我建议的改变:

  1. 更改函数的返回值,使其返回总和。
  2. 在递归调用中使用返回的值。
  3. 不要使用while循环和递归调用。使用其中一种。
  4. 递归版:

    int Sum(Node *head)
    {
        if ( head != NULL )
            return head->data + Sum(head->next);
        else
            return 0;
    }
    

    循环版本:

    int Sum(Node *head)
    {
       int sum = 0;
       while (head != NULL) {
         sum += head->data; 
         head = head->next;
       }
       return sum;
    }
    

答案 1 :(得分:0)

(C代码)

对于上面的答案,循环版本不需要是:

int Sum(struct node* head)
{
   int sum = 0;
   while (head != NULL) {
      sum += head->data;
      head = head->next; // This needs to be added to go through all nodes
   }
   return sum;
}

另外,我相信你也可以这样做一个递归方法: (C代码)

int Sum(struct node* head) 
{

  if (head == NULL)
     return 0;

  return (head->data) + Sum(head->next);
}