如何使用c ++中的递归在列表中找到偶数的总和?

时间:2017-12-09 22:48:31

标签: c++ c++11 c++14 c++builder

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);
            }
}

3 个答案:

答案 0 :(得分:2)

当你编写一个返回值的函数时,无论是否递归,你需要探索代码中的所有路径,而不仅仅是你感兴趣的主路径。"

在您的具体情况下,您需要决定返回什么

  • 当前节点代表偶数时 - 您的代码已涵盖此案例,
  • 当前节点表示奇数时 - 您需要返回相同的值,就好像节点不存在一样,并且
  • 当没有当前节点时 - 当列表为空或空(即零)时,您返回的值。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

请勿使用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