我目前正在研究使用遞歸進行指數計算的方法。這是我到目前爲止:修復遞歸求冪法?
public static long exponentiation(long x, int n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return x;
// i know this doesn't work since im returning long
} else if (n < 0) {
return (1/exponentiation(x, -n));
} else {
//do if exponent is even
if (n % 2 == 0) {
return (exponentiation(x * x, n/2));
} else {
// do if exponent is odd
return x * exponentiation(x, n - 1);
}
}
}
我有兩個問題。首先問題是我不能做負指數,這不是一個主要問題,因爲我不需要做負指數。第二個問題是,某些計算給我錯誤的答案。例如2^63給了我正確的值,但它給了我一個負數。 2^64然後就給我0.有沒有辦法解決這個問題?我知道我可以將long
改爲double
,而且我的方法可以很好地工作。但是,我的教授要求我們使用long
。感謝您的幫助!
[Long.MAX_VALUE](http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#MAX_VALUE)。 – rgettman
@rgettman我明白這一點。我想知道是否有一種方法可以解決這個問題。我知道這可能聽起來像一個愚蠢的問題,但由於我是編程新手,我以爲我應該問問並看看。 – name
@ug_哦,好的。但爲什麼當我把長變成雙倍時,它會對更大的價值起作用? – name