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