c - 仅递归地添加偶数

标签 c recursion

该程序应该从用户处获取一系列值,然后仅将偶数添加到该范围中。我正在运行递归函数并准确显示它需要显示的内容。我只是不确定如何仅实际添加偶数。有人可以帮助我吗?

这是我的递归函数:

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

现在,一切都归零。由于该变量是在每个函数的开头重新声明的,因此我不会对该变量执行任何操作。有人可以帮助我知道我应该在哪里添加。 (我认为我只能有一份返回声明)如果您需要更多信息,请询问。谢谢

最佳答案

逻辑需要两处改变:

  1. 如果第一个数字是偶数,那么您需要将其添加到总和中,否则不执行任何操作。这就是内部 if/else 语句中应该发生的情况。目前,您的代码在两个部分中执行相同的操作(除了不同的打印输出)。

  2. 无论如何,您都应该递归调用函数来添加剩余的总和。这种情况发生在 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/

相关文章:

c - 如何在C中将struct转换为char数组

c# - 使用 PropertyInfo 中的新类型递归调用泛型方法?

python - 字符串的基本递归?

python - 字典叶生成器

多次调用同一个 threadproc(),第一次调用没有完成

php - 使用 PHP 执行 C 脚本

java - 二叉搜索树递归添加

algorithm - 是否存在只能递归或只能迭代解决的问题?

来自 ICC 的 _PGOPTI_Prof_Dump_All() 的 Clang 或 GCC 等价物

c - 如何在 Eclipse 上创建 C 类