-1
在我的班级中,我尝试以2种方式返回总和:2^n + 2^(n+1) + 2^(n+2) ...
。 在第一种方法中迭代,在第二种方法中递归。来自类似方法的不同结果
只要数字不是太大,就可以工作。有人可以向我解释为什么这些方法在使用高数字时会返回不同的答案?我也想知道哪一个给我总是正确的答案。
public class Power
{
public static void main(String[] args)
{
System.out.println(iterativ(3));
System.out.println(rekursiv(3));
System.out.println(iterativ(40));
// The recursive one is lower by 10
System.out.println(rekursiv(40));
}
public static int iterativ(int x)
{
int sum = 0;
for (int i = 0; i <= x; i++) {
sum += Math.pow(2, i);
}
return sum;
}
public static int rekursiv(int x)
{
if (x > 0) {
return ((int) Math.pow(2, x) + rekursiv(x - 1));
}
return 1;
}
}
“我也想知道哪一个给我总是正确的答案。” - 我猜这就是你的工作;) - 编辑:刚才看到你的代码基本上包含了我要求的例子。 – Thomas
调试器和'println()'是你最好的朋友! – alex
至少有一个显而易见的原因,用'double'代替'int'来试试你的代码:int的最大值是2^31-1,明显低于你正在尝试的2^40。因此你会得到一个'int'溢出。尽管失去了一些精确度,“double”仍然能够代表这些数值。或者使用'long',它允许值高达2^63-1(即,你的代码应该工作到x = 62)。 – Thomas