如何在 C++ 中使用递归查找列表中的偶数之和?

How to find sum of even numbers in a list using recursion in c++?

int list::Sum_Even_Values(node *head)
{

     static int sum=0; 
      if(!isempty())
            {
            if(head->info %2==0)
            return head->info +Sum_Even_Values(head->next);
            }
}

当您编写一个 return 是一个值的函数时,无论递归与否,您需要探索代码中的所有路径,而不仅仅是您的主要 "path of interest."

在您的具体情况下,您需要决定 return

  • 当当前节点代表偶数时 - 你的代码已经涵盖了这种情况,
  • 当当前节点表示奇数时 - 你需要return相同的值就好像节点不存在一样,并且
  • 当没有当前节点时 - 当列表为 null 或空(即零)时,这是您 return 的值。

您需要为其余两种情况添加 return 语句。一旦你这样做了,你的功能就完成了。

这是通过在每次调用函数时通过引用传递 sum 变量来实现相同目的的另一种方法。

void sumEvenValues(Node * head, int& sum){
    if (head != NULL){
        if (head->info % 2 == 0){
            sum += head->info;
        }
        sumEvenValues(head->next, sum);
    }
}

不要使用 static 变量,因为如果您需要多次对列表求和,您将无法将其重置回 0。试试这个:

int list::Sum_Even_Values(node *head)
{
    int sum = 0;
    if (head) {
        if ((head->info % 2) == 0)
            sum = head->info;
        sum += Sum_Even_Values(head->next);
    }
    return sum;
}

Live Demo