我想更好地理解递归。我正在编写一个基本的几何系列方法,我知道可以通过循环更容易完成,但这不是目的。该方法产生0和1值的当前输出,其简单地为1和1.5。但对于2,当它应该是1.75时输出1.25。有关更好的方法的任何指示吗?
public static double geometricSum(int n) {
if(n == 0){
return 1;
}
n = n * 2;
return 1.0 / n + geometricSum((int) (1/Math.pow(2, n)));
}
答案 0 :(得分:1)
这是因为您将浮点数转换为int。
1/(2^2)=1/4=0.25 --> 0
当你将你的浮子作为一个int传递时,你并没有让你的东西正常工作。 所以0.25 + geometricSum(0)= 1.25。 在第一个发生相同。你传递了0.5,但是变成了一个int,所以你没有得到适当的近似。
作为建议,总是将()
放在你的数学函数上,以便制作程序,并且你自己,了解它以何种顺序计算数字。
答案 1 :(得分:0)
第一个问题是强制转换为int,给出错误的结果,已由reyeselda95描述。
隐藏了第二个问题,即如果你修复了这个问题,你就得到了这个问题:
public static double geometricSum(double n) {
System.err.println("Calling with " + n);
if(n == 0){
return 1;
}
n = n * 2;
return 1.0 / n + geometricSum((1/Math.pow(2, n)));
}
使用提供的值2调用此选项会导致具有以下值的调用之间出现循环,从而导致堆栈溢出。
...
Calling with 0.4999999999999999
Calling with 0.5000000000000001
Calling with 0.4999999999999999
Calling with 0.5000000000000001
...
如果我理解正确的话,这可能是您正在寻找的功能:
public static double geometricSum(int count) {
if (count == 0) {
return 1;
}
return geometricSum(count-1) + Math.pow(2, -count);
}
答案 2 :(得分:0)
答案 3 :(得分:0)
这是我的python代码:
def geometricSum(k):
if k == 0:
return 1
return 1/2**k + geometricSum(k-1)
k = int(input())
print(geometricSum(k))
这与 2的幂有关,即 2 Pow n ,其中 n 是整数。
此处递归用于获取 n 的值序列。 就我而言,我必须计算 1 /(2 pow n)的值。