【问题标题】:C Program: Adding a series using recursionC 程序:使用递归添加系列
【发布时间】:2015-10-30 04:46:20
【问题描述】:

我是递归的新手,所以我正在尝试编写一个简单的程序来添加系列 1/n 的第 n 个数字。所以如果用户输入 n = 4,程序将添加 1 + 1/2 + 1/3 + 1/4。我的程序一直输出系列之和为0。有人可以解释我做错了什么吗?我会很感激帮助。这是我的代码:

#include <stdio.h>

double sum(double n);

int main() {
    double n;
    double total;
    printf("Enter a positive integer greater than 0: ");
    scanf("%lf", &n);
    total = sum(n);
    printf("Sum: %lf", total);

    return 0;
}

double sum(double n) {
    if (n == 1)
        return 1;
    else
        return ((1 / n) + sum(n - 1));
}

【问题讨论】:

  • (1 / n) --> (1.0 / n)... double sum(int n) {
  • @Bluepixy 的解决方案应该可以工作。我还想指出双打和平等不能很好地混合! if (n == 1) 可能由于浮点错误而失败。你最好使用不等式。如果n 是int(如@Bluepixy 的解决方案),那么这不是问题。

标签: c recursion


【解决方案1】:

问题出在这个函数的定义上:

double sum(int n) {
    if (n == 1)
        return 1;
    else
        return ((1 / n) + sum(n - 1));
}

n 是 int 所以 1/n 将始终被评估为 int 因为 1 和 n 都是整数。因此1/n 对于每个 n>1 始终为 0。

解决方案是将n 定义为double:

double sum(double n) {
    if (n <= 1.0)
        return 1.0;
    else
        return ((1.0 / n) + sum(n - 1.0));
}

【讨论】:

    【解决方案2】:

    检查您的基本情况。 sum(1) 应该返回 1。

    同样,一个 int 除以一个 int 返回一个 int。在除法中使用浮点数。

    【讨论】:

    • 哦,是的,我没有意识到我使用的是 int n 而不是 double n。谢谢!
    • 您编辑了帖子以修复第一个错误。这不是创建有用问题和答案的知识库的最佳方式。 :-)
    【解决方案3】:

    应该是

    double sum(double n) {
    if (n == 1)
        return 1.0;
    else
        return ((1.0 / n) + sum(n - 1));
    }
    

    1/n 将始终返回 0,因为 'n' 充当整数值而不是浮点值,即使数据类型是 double 因为分配给它的值是整数类型。

    【讨论】:

      猜你喜欢
      • 2022-09-24
      • 1970-01-01
      • 2022-06-14
      • 2019-11-16
      • 2021-03-22
      • 2021-09-07
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多