【发布时间】: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 的解决方案),那么这不是问题。