2010-12-06 26 views
0

我想計算任何指數(負數或正數)和整數類型的基數的結果。我使用遞歸:計算任何指數的權力(負數或正數)

public static double hoch(double basis, int exponent) { 
    if (exponent > 0) { 
     return (basis * hoch(basis, exponent - 1)); 
    } else if (exponent < 0) { 
     return ((1/(basis * hoch(basis, exponent + 1)))); 
    } else { 
     return 1; 
    } 
} 

如果指數爲負,則返回1.0,但是這是錯誤的。對於例如hoch(2,-2)應該是0.25。任何想法可能是錯的?

回答

5
}else if(exponent < 0){ 
     return ((1/(basis*hoch(basis, exponent+1)))) 

應該是

}else if(exponent < 0){ 
     return (1/hoch(basis, -exponent)); 
+0

什麼是-exponent?爲什麼不使用指數-1 – 2010-12-06 09:03:46

1

你的括號是錯誤的。你希望乘以遞歸調用的結果,而不是除以它;而你想要你乘以的東西是1/basis(它「剝離」一個負指數)。

1
public static double hoch(double basis, int exponent){ 
    if(exponent > 0){ 
     return basis*hoch(basis, exponent-1); 
    }else if(exponent < 0){ 
     return hoch(basis, exponent+1)/basis; 
    }else{ 
     return 1; 
    } 
} 

雖然更有效(遞歸)溶液是

public static double hoch(double basis, int exponent){ 
    if(exponent == 0) 
     return 1; 
    else{ 
     double r = hoch(basis, exponent/2); 
     if(exponent % 2 < 0) 
      return r * r/basis; 
     else if(exponent % 2 > 0) 
      return r * r * basis; 
     else 
      return r * r; 
    } 
} 
1

隨着HOCH(2,-2)你實際計算

 1/(-2 * (1/(-1 * (1/1))) 
<=> 1/(-2 * (1/(-1)) 
<=> 1/(-2 * -1) 
<=> 1/2 
0

將BASE提升爲pos或neg的工作代碼BASE:

FUNC Raise_To_Power 

LPARAMETERS pnBase, pnPow 

DO CASE 

    CASE pnPow = 0 
    RETURN 1 
    CASE pnPow > 0 
    RETURN pnBase * Raise_To_Power(pnBase, pnPow-1) 
    CASE pnPow < 0 
    RETURN 1/(pnBase * Raise_To_Power(pnBase, -(pnPow+1))) 

ENDCASE 

ENDFUNC