我正在尝试创建一个递归函数。我将是一个整数,但输出将是一个双。我知道函数不能启动双倍,但是当函数达到最大值时,我将仍然是一个整数。什么时候会出现" up"输出将变为double,但我不明白为什么函数不起作用。
long sum1(int i) {
if(i==1) {
return 1;
} else {
return sum1(i-1) + 1/i;
}
}
这是我执行此系列的代码:
输出不会出错,但结果无法正确计算。
答案 0 :(得分:3)
1/i
>时首先i
始终为0 1,因为你要划分两个int
s。
其次,由于返回类型为long
,因此无论如何都会截断任何分数。
您应该返回double
以获得准确的结果:
double sum1(int i) {
if(i==1) {
return 1.0;
} else {
return sum1(i-1) + 1.0/i;
}
}
答案 1 :(得分:0)
错误计算的问题是sum1(i-1) + 1/i;
导致整数计算。当i为整数> 1时,1 / i总是= 0。
只需使用double进行递归,就可以传递int参数。
double sum1(double i) {
if(i==1) {
return 1;
} else {
return sum1(i-1) + 1/i;
}
}