題:求一個數 data 的 n 次冪,要求時間複雜度爲log(n)java
1:遞歸算法:算法
/** * x^3=(x^2)*x;x^7=(x^3)^2 * x * * 遞歸算法 * @param data 底數 * @param n 次冪數 * @return */ private static int recursion(int data, int n) { if (n == 0) { return 1; } if (n == 1) { return data; } if (n % 2 == 0) { return recursion(data * data, n/2); } else { return recursion(data * data, n/2) * data; } }
2:非遞歸code
/** * 非遞歸(當乘以的次數大於n的一半的的時候,剩餘的data的個數要一個一個乘) * @param data 底數 * @param n 次冪數 * @return */ private static int noRecursion(int data, int n) { int result = data; for (int i=1; i<n;) { if (i < n/2) { result *= result; i = i*2; } else { result = result * data; i = i + 1; } } return result; }