1. 程式人生 > >Java 遞歸解決 "僅僅能兩數相乘的計算器計算x^y" 問題

Java 遞歸解決 "僅僅能兩數相乘的計算器計算x^y" 問題

args power ava auth mod 每次 一個數 rac pre


/**
 * 求一個數的乘方
 * 求x^y,y是一個正整數。

設計算器僅僅能計算兩數相乘,不能一次計算n個數相乘。

* 知:2^5=(2^2)^2*2; 2^6=(2^2)^3=((4)^2)*4; 2^8=(2^2)^4= (4^2)^2= 16^2 * 得到規律:x^y= (x^2)^(y/2),定義a=x^2,b=y/2, 則得到形如: x^y= a^b; * y假設是奇數,則分解的最後還要再乘以a(如上面2^6分解成4^3時):x^y=a^b*x. * * 用遞歸來解:那麽每次x都傳入一個新的值。即是a。y值倍減,即是b * * @author stone * @date 2015-7-2 上午11:31:53 */ public class Power { private static long pow(long x, long y) { if (x == 0 || x == 1) { return x; } long tx = 0; long ty = 0; if (y > 1) { ty = y / 2; tx = x * x; System.out.println(tx); if (y % 2 == 0) { return pow(tx, ty); } else { return pow(tx, ty) * x; } } else { return x; } } public static void main(String[] args) { long result = pow(2, 10); System.out.println(result); } }



Java 遞歸解決 "僅僅能兩數相乘的計算器計算x^y" 問題