C程序:使用递归添加系列

时间:2015-10-30 04:46:20

标签: c recursion

我是递归的新手所以我正在尝试编写一个简单的程序,它增加了系列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));
}

3 个答案:

答案 0 :(得分:1)

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

此外,int除以int返回int。在您的部门中使用浮点数。

答案 1 :(得分:1)

问题在于此功能的定义:

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

nint因此1/n将始终评估为int,因为1和n都是整数。因此,对于每个n&gt; 1,1/n始终为0。

解决方案是将n定义为double

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

答案 2 :(得分:0)

应该是

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

1 / n将始终返回0,因为&#39; n&#39;即使数据类型为double,因为分配给它的值是整数类型,它也可以作为整数值而不是浮点值。