-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