该程序应该从用户处获取一系列值,然后仅将偶数添加到该范围中。我正在运行递归函数并准确显示它需要显示的内容。我只是不确定如何仅实际添加偶数。有人可以帮助我吗?
这是我的递归函数:
int recursive_function(int first_number, int second_number)
{
int even_range_sum = 0;
printf("\n Entering sum function for range %d to %d",
first_number, second_number);
if(first_number <= second_number)
{
if(is_even(first_number) == 1)
{
printf("\n Adding: %d", first_number);
recursive_function(first_number + 1, second_number);
}
else
{
printf("\n Skipping: %d", first_number);
recursive_function(first_number + 1, second_number);
}
}
printf("\n Exiting sum function for range %d to %d ",
first_number, second_number);
printf("with result: %d", even_range_sum);
return even_range_sum;
}
现在,一切都归零。由于该变量是在每个函数的开头重新声明的,因此我不会对该变量执行任何操作。有人可以帮助我知道我应该在哪里添加。 (我认为我只能有一份返回声明)如果您需要更多信息,请询问。谢谢
最佳答案
逻辑需要两处改变:
如果第一个数字是偶数,那么您需要将其添加到总和中,否则不执行任何操作。这就是内部 if/else 语句中应该发生的情况。目前,您的代码在两个部分中执行相同的操作(除了不同的打印输出)。
无论如何,您都应该递归调用函数来添加剩余的总和。这种情况发生在 if/else 之外,因为无论第一个数字是否为偶数,您都想添加范围的其余部分。
重要的是,您需要使用返回值。您的函数返回一个(部分)总和,因此您需要对其返回值执行某些操作。如果您只是调用它但忽略它的返回值,那么什么也没有发生。
结果:
if (first_number <= second_number)
{
if (is_even(first_number))
{
printf("\n Adding: %d", first_number);
even_range_sum += first_number;
}
else
{
printf("\n Skipping: %d", first_number);
}
even_range_sum += recursive_function(first_number + 1, second_number);
}
关于c - 仅递归地添加偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840075/