Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中使用递归查找列表中的偶数之和+;?_C++_C++11_C++14_C++builder - Fatal编程技术网

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

C++ 如何在c+中使用递归查找列表中的偶数之和+;?,c++,c++11,c++14,c++builder,C++,C++11,C++14,C++builder,在编写返回值(递归或非递归)的函数时,需要探索代码中的所有路径,而不仅仅是主要的“感兴趣的路径” 在您的具体情况下,您需要决定返回什么 当当前节点表示偶数时-您的代码已经涵盖了这种情况 当当前节点表示奇数时-需要返回与节点不存在时相同的值,并且 当没有当前节点时-当列表为null或空(即零)时,将返回该值 您需要为其余两种情况添加return语句。一旦你这样做了,你的函数就完成了。当你写一个返回值的函数时,不管是递归的还是非递归的,你都需要在代码中探索所有的路径,而不仅仅是你主要的“感兴趣的

在编写返回值(递归或非递归)的函数时,需要探索代码中的所有路径,而不仅仅是主要的“感兴趣的路径”

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

  • 当当前节点表示偶数时-您的代码已经涵盖了这种情况
  • 当当前节点表示奇数时-需要返回与节点不存在时相同的值,并且
  • 当没有当前节点时-当列表为null或空(即零)时,将返回该值

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

当你写一个返回值的函数时,不管是递归的还是非递归的,你都需要在代码中探索所有的路径,而不仅仅是你主要的“感兴趣的路径”

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

  • 当当前节点表示偶数时-您的代码已经涵盖了这种情况
  • 当当前节点表示奇数时-需要返回与节点不存在时相同的值,并且
  • 当没有当前节点时-当列表为null或空(即零)时,将返回该值

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

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

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

下面是另一种实现相同功能的方法,即在每次调用函数时通过引用传递
sum
变量

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。请尝试以下方法:

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

不要使用
静态变量,因为如果需要对列表进行多次求和,将无法将其重置回0。请尝试以下方法:

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

如果
isempty()
返回true会发生什么?或者如果
head->info%2!=0
?然后返回什么?如果
isempty()
返回true会发生什么?或者如果
head->info%2!=0
?那你回来干什么?