我是递归的新手所以我正在尝试编写一个简单的程序,它增加了系列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));
}
答案 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));
}
n
为int
因此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,因为分配给它的值是整数类型,它也可以作为整数值而不是浮点值。