题:求一个数 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; }