如何在 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;
}
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;
}