Java 双输出递归函数
我正在尝试做一个递归函数。我将是一个整数,但是输出将是双精度的。我知道函数不能以双精度开始,但是当函数达到最大“深度”时,我仍然是一个整数。当它将“上升”时,输出将变为双精度,但我不明白为什么该函数不能工作Java 双输出递归函数,java,recursion,Java,Recursion,我正在尝试做一个递归函数。我将是一个整数,但是输出将是双精度的。我知道函数不能以双精度开始,但是当函数达到最大“深度”时,我仍然是一个整数。当它将“上升”时,输出将变为双精度,但我不明白为什么该函数不能工作 long sum1(int i) { if(i==1) { return 1; } else { return sum1(i-1) + 1/i; } } 这是我执行此系列的代码: 系列1(i)=1+1/2+1/3+。1/i 输出没有给出错误,但结果计算不正确。首
long sum1(int i) {
if(i==1) {
return 1;
} else {
return sum1(i-1) + 1/i;
}
}
这是我执行此系列的代码:
输出没有给出错误,但结果计算不正确。首先,当
i
>1时,1将始终为0,因为您要除以两个int
s
第二,由于返回类型是long
,任何分数都将被截断
您应该返回一个double
,以获得准确的结果:
double sum1(int i) {
if(i==1) {
return 1.0;
} else {
return sum1(i-1) + 1.0/i;
}
}
首先,当i
>1时,1/i
将始终为0,因为您正在除以两个int
s
第二,由于返回类型是long
,任何分数都将被截断
您应该返回一个double
,以获得准确的结果:
double sum1(int i) {
if(i==1) {
return 1.0;
} else {
return sum1(i-1) + 1.0/i;
}
}
错误计算的问题是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;
}
}
错误计算的问题是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;
}
}
谢谢,现在可以用了。如果我理解正确,long是整数的一种类型吗?我的老师说做递归函数需要long。@T.v.L.long
是一种整数类型,大小为8字节。与int
(只有4个字节)相比,它可以保存更大(和更小的负值)。递归函数的返回类型取决于需要返回的内容<代码>长
不一定是必需的。这解释了很多。谢谢,汉克斯,现在可以用了。如果我理解正确,long是整数的一种类型吗?我的老师说做递归函数需要long。@T.v.L.long
是一种整数类型,大小为8字节。与int
(只有4个字节)相比,它可以保存更大(和更小的负值)。递归函数的返回类型取决于需要返回的内容<代码>长
不一定是必需的。这解释了很多。谢谢